所以,我需要你的帮助。我在这个话题上找不到任何相关资料。Golang是一门新生的编程语言,因此对于像我这样的新手来说很难快速找到答案。
所以,我需要你的帮助。我在这个话题上找不到任何相关资料。Golang是一门新生的编程语言,因此对于像我这样的新手来说很难快速找到答案。
预声明的Go int
类型大小是实现特定的,可以是32位或64位 (数字类型)。
这里有一个将大端序的 int
转换为 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]
int
不能保证为32位。这取决于具体实现。当前的Go编译器都有它,但语言规范并没有强制要求,因此在转换为uint32
时应该小心。可能会出现数据丢失。 - jimtIntsToBytesBE
假定int宽度为32位。 - jimtint
类型大小为32位或64位。 - peterSO