Go int16到字节数组

Go int16到字节数组,go,Go,我正在尝试将int16转换为字节数组,但似乎无法使其正常工作。 以下是我现在得到的: int16 i := 41 a := []byte(string(i))//this line is wrong 另外,如果有人想知道数组的长度是否需要为2。如果要获取int16的字节,请尝试以下操作: var i int16 = 41 var h, l uint8 = uint8(i>>8), uint8(i&0xff) Go试图使编写依赖于平台属性(如字节顺序)的程序变得困难。因此,

我正在尝试将int16转换为字节数组,但似乎无法使其正常工作。
以下是我现在得到的:

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

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

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

var i int16 = 41
var h, l uint8 = uint8(i>>8), uint8(i&0xff)
Go试图使编写依赖于平台属性(如字节顺序)的程序变得困难。因此,禁止使用导致此类依赖关系的类型双关(例如用int16覆盖字节数组)


如果你真的想射中自己的脚,试试这个软件包。

当FuzzXL的答案有效时,你也可以使用编码/二进制软件包:

var i int16 = 41
b := make([]byte, 2)
binary.LittleEndian.PutUint16(b, uint16(i))
encoding/binary软件包具有预构建的函数,用于为所有固定大小的整数编码little和big-endian,如果您使用的是读写器而不是字节片,则还有一些易于使用的函数。例如:

var i int16 = 41
err := binary.Write(w, binary.LittleEndian, i)

您想要int16的单个字节吗?谢谢,非常适合!!:D对不起,我不能告诉你答案,因为我还没有15分。@Max没问题。享受编码的乐趣!这难道不会比简单地移动两个字节以形成uint16慢很多吗?@fuz“简单地移动…字节”正是这些函数所做的,因此编译器可以选择内联该操作(如果愿意)。本质上,您在这里询问是否应该手动内联小函数,而不是让编译器决定是否/何时这样做。在大多数情况下,这个问题的答案是“不”