如何将 int64 转换为字节数组?

新手上路,请多包涵

我有一个 id 代表 int64 。我如何将其转换为 []byte ?我看到二进制包为 uint 执行此操作,但我想确保我不会破坏负数。

原文由 Charles L. 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 753
2 个回答

int64uint64 之间转换不会改变符号位,只会改变它的解释方式。

您可以使用 Uint64PutUint64 以及正确的 ByteOrder

http://play.golang.org/p/wN3ZlB40wH

 i := int64(-123456789)

fmt.Println(i)

b := make([]byte, 8)
binary.LittleEndian.PutUint64(b, uint64(i))

fmt.Println(b)

i = int64(binary.LittleEndian.Uint64(b))
fmt.Println(i)

输出:

 -123456789
[235 50 164 248 255 255 255 255]
-123456789

原文由 JimB 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您不关心符号或字节序(例如,地图的散列键等原因),您可以简单地移动位,然后将它们与 0b11111111 (0xFF) 进行运算:

(假设 v 是一个 int32)

 b := [4]byte{
        byte(0xff & v),
        byte(0xff & (v >> 8)),
        byte(0xff & (v >> 16)),
        byte(0xff & (v >> 24))}

(对于 int64/uint64,你需要有一个长度为 8 的字节片)

原文由 ahmet alp balkan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题