package main
import (
"encoding/binary"
"fmt")
func main() {
const x = 0x5AF3ACA48850
fmt.Println(int64(x))
var data = make([]byte, 8)
// 大端序 我们一般采用的是大端序. 小端序不考虑
binary.BigEndian.PutUint64(data, uint64(x))
fmt.Println(data)
// output:
// [0 0 90 243 172 164 136 80]
// 小端序 binary.LittleEndian.PutUint64(data, uint64(x))
fmt.Println(data)
// output:
// [80 136 164 172 243 90 0 0]
var bytes = []byte{0, 0, 90, 243, 172, 164, 136, 80}
fmt.Println(binary.BigEndian.Uint64(bytes) == uint64(x))
// true
}
因此:
- int转byte之后,得到的是
[172 164 136 80]
而如何才可以得到这种输出?[]byte{0x17, 0xED, 0x48, 0x94, 0x1A, 0x08, 0xF9, 0x81}
因为需要直接填入到代码中,不能直接写数值。
int 转 byte 之后,得到的是 [0 0 90 243 172 164 136 80]
,因此填入代码应该是这么写:
var bytes = []byte{0, 0, 90, 243, 172, 164, 136, 80}
如果你需要使用16进制写法的话. 你手动算一下就行了,也可以在线工具算一下:
var bytes = []byte{0, 0, 0x5a, 0xf3, 0xac, 0xa4, 0x88,0x50}
你上面的写法的问题在于. 0x5AF3ACA48850
数值太大了,超过了 int32
的最大值,溢出了,应该使用的是 int64 去转换.
还有我转换的结果与你的不相等,不知道是否你的是正确与否
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…