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

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


白猪掌柜的
浏览 578回答 3
3回答

慕少森

在int64和之间转换uint64不会改变符号位,只会改变它的解释方式。您可以使用Uint64和PutUint64正确ByteOrderhttp://play.golang.org/p/wN3ZlB40wHi := 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

桃花长相依

如果您不关心符号或字节顺序(例如,地图的散列键等原因),您可以简单地移动位,然后将它们与 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 的字节切片)

牛魔王的故事

代码:var num int64 = -123456789// convert int64 to []bytebuf := make([]byte, binary.MaxVarintLen64)n := binary.PutVarint(buf, num)b := buf[:n]// convert []byte to int64x, n := binary.Varint(b)fmt.Printf("x is: %v, n is: %v\n", x, n)输出x is: -123456789, n is: 4
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go