所以,我需要你的帮助。我找不到关于那个话题的任何东西。Golang是一种新鲜出炉的语言,因此对于像我这样的新手来说很难快速找到答案。
预先定义的Go int类型大小是特定于实现的,是32位还是64位(数字类型)。
int
这是将big-endian ints 转换为bytes(uint8s)的示例。
byte
uint8
package main import ( "encoding/binary" "fmt" "reflect" ) func IntsToBytesBE(i []int) []byte { intSize := int(reflect.TypeOf(i).Elem().Size()) b := make([]byte, intSize*len(i)) for n, s := range i { switch intSize { case 64 / 8: binary.BigEndian.PutUint64(b[intSize*n:], uint64(s)) case 32 / 8: binary.BigEndian.PutUint32(b[intSize*n:], uint32(s)) default: panic("unreachable") } } return b } func main() { i := []int{0, 1, 2, 3} fmt.Println("int size:", int(reflect.TypeOf(i[0]).Size()), "bytes") fmt.Println("ints:", i) fmt.Println("bytes:", IntsToBytesBE(i)) }
输出:
int size: 4 bytes ints: [0 1 2 3] bytes: [0 0 0 0 0 0 0 1 0 0 0 2 0 0 0 3]
要么
int size: 8 bytes ints: [0 1 2 3] bytes: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 3]