我有一个在int64
中表示的id。如何将其转换为[]byte
?我看到二进制包为uint做了这件事,但我想确保我不会破坏负数。
发布于 2016-02-13 04:37:44
在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
发布于 2019-07-30 13:34:33
如果你不关心符号或字节顺序(例如,像映射的散列键等原因),你可以简单地移位,然后用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的字节切片)
发布于 2017-12-26 20:17:17
代码:
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
https://stackoverflow.com/questions/35371385
复制相似问题