16

我正在尝试将 int16 转换为字节数组,但我似乎无法让它工作。
这是我现在所拥有的:

int16 i := 41
a := []byte(string(i))//this line is wrong

此外,如果有人想知道数组的长度需要为 2。

4

2 回答 2

51

虽然 FUZxxl 的答案有效,但您也可以使用 encoding/binary 包:

var i int16 = 41
b := make([]byte, 2)
binary.LittleEndian.PutUint16(b, uint16(i))

encoding/binary 包具有用于对所有固定大小整数的小端和大端进行编码的预构建函数,如果您使用的是 Readers 和 Writers 而不是字节切片,则还具有一些易于使用的函数。例子:

var i int16 = 41
err := binary.Write(w, binary.LittleEndian, i)
于 2013-06-23T14:34:14.003 回答
22

如果要获取 int16 的字节,请尝试以下操作:

var i int16 = 41
var h, l uint8 = uint8(i>>8), uint8(i&0xff)

Go 试图让编写依赖于平台属性(例如字节顺序)的程序变得困难。因此,禁止导致这种依赖关系的类型双关语(例如用 int16 覆盖字节数组)。

如果您真的想在脚上开枪,请尝试使用unsafe包。

于 2013-06-23T11:16:56.447 回答