为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
白猪掌柜的 2021-12-13 17:12:08
我有一个 id 表示在int64. 如何将其转换为 a []byte?我看到二进制包为 uint 执行此操作,但我想确保我不会破坏负数。
查看完整描述

3 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

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


您可以使用Uint64和PutUint64正确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


查看完整回答
反对 回复 2021-12-13
?
桃花长相依

TA贡献1860条经验 获得超8个赞

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


(假设 v 是一个 int32)


b := [4]byte{

        byte(0xff & v),

        byte(0xff & (v >> 8)),

        byte(0xff & (v >> 16)),

        byte(0xff & (v >> 24))}

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


查看完整回答
反对 回复 2021-12-13
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

代码:


var num int64 = -123456789


// convert int64 to []byte

buf := make([]byte, binary.MaxVarintLen64)

n := binary.PutVarint(buf, num)

b := buf[:n]


// convert []byte to int64

x, n := binary.Varint(b)

fmt.Printf("x is: %v, n is: %v\n", x, n)

输出


x is: -123456789, n is: 4


查看完整回答
反对 回复 2021-12-13
  • 3 回答
  • 0 关注
  • 565 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信