-
慕少森
在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