我有一个 []byte 对象,想要得到它的字节大小。在 Golang 中是否有类似于 C 语言 sizeof() 的功能?如果没有,你能否提供其他方法来获得相同的结果?
要返回字节切片中的字节数,请使用 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。
我认为你最好的选择是:
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;
https://play.golang.org/p/HhJif66VwY
import unsafe "unsafe"
size := unsafe.Sizeof(bytes)
请注意,对于某些类型,如切片,Sizeof
将会给出切片描述符的大小,这可能不是您想要的。此外,请记住切片的长度和容量是不同的,并且binary.Size返回的值反映了长度。
binary.Size
来获取数组的大小,你需要使用length * data_type_size
。这可能是你想要的,但请记住,数组的大小(容量)通常是不同的。 - JimB[]byte
),其中容量是底层数组的大小;__在切片结构体中指向字段array
的数组__。与C语言的sizeof
最接近的等效物将返回整个数组的分配大小,而不是您正在使用的部分。 - JimBcap(bytes) * unsafe.Sizeof(bytes[0])
的操作。 - evanmcdonnal