英文:
Size of a byte array golang
问题
我有一个 []byte 对象,我想要获取它的字节大小。在 golang 中是否有类似于 C 语言的 sizeof() 函数的等价物?如果没有,你能否提供其他获取相同结果的方法?
英文:
I have a []byte object and I want to get the size of it in bytes. Is there an equivalent to C's sizeof() in golang? If not, Can you suggest other ways to get the same?
答案1
得分: 32
要返回字节切片中的字节数,可以使用len
函数:
bs := make([]byte, 1000)
sz := len(bs)
// sz == 1000
如果你指的是底层数组中的字节数,请使用cap
:
bs := make([]byte, 1000, 2000)
sz := cap(bs)
// sz == 2000
一个字节保证是一个字节大小:https://golang.org/ref/spec#Size_and_alignment_guarantees。
英文:
To return the number of bytes in a byte slice use the len
function:
bs := make([]byte, 1000)
sz := len(bs)
// sz == 1000
If you mean the number of bytes in the underlying array use cap
instead:
bs := make([]byte, 1000, 2000)
sz := cap(bs)
// sz == 2000
A byte is guaranteed to be one byte: https://golang.org/ref/spec#Size_and_alignment_guarantees.
答案2
得分: 11
我认为你最好的选择是:
package main
import "fmt"
import "encoding/binary"
func main() {
thousandBytes := make([]byte, 1000)
tenBytes := make([]byte, 10)
fmt.Println(binary.Size(tenBytes))
fmt.Println(binary.Size(thousandBytes))
}
虽然有很多选项,比如只导入unsafe
包并使用sizeof
:
import unsafe "unsafe"
size := unsafe.Sizeof(bytes)
请注意,对于某些类型(如切片),Sizeof
将给出切片描述符的大小,这可能不是你想要的。此外,请记住切片的长度和容量是不同的,而binary.Size
返回的值反映的是长度。
英文:
I think your best bet would be;
package main
import "fmt"
import "encoding/binary"
func main() {
thousandBytes := make([]byte, 1000)
tenBytes := make([]byte, 10)
fmt.Println(binary.Size(tenBytes))
fmt.Println(binary.Size(thousandBytes))
}
https://play.golang.org/p/HhJif66VwY
Though there are many options, like just importing unsafe and using sizeof;
import unsafe "unsafe"
size := unsafe.Sizeof(bytes)
Note that for some types, like slices, Sizeof
is going to give you the size of the slice descriptor which is likely not what you want. Also, bear in mind the length and capacity of the slice are different and the value returned by binary.Size reflects the length.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论