Golang中如何int 16进制转byte再转int
问题:
已知一段16进制的数0x5AF3ACA48850
,需要转成8位的byte字节。存在几个问题:
- int转byte之后,得到的是
[172 164 136 80]
而如何才可以得到这种输出?[]byte{0x17, 0xED, 0x48, 0x94, 0x1A, 0x08, 0xF9, 0x81}
因为需要直接填入到代码中,不能直接写数值。 - 再转回来的时候,数值对不上了。比如n2,数值
0x5AF3ACA48850
,转成byte,再转成int,却变成了-1398503344
- 很奇怪,第一个数
pqStr
解出来的int值不是0x5AF3ACA48850
代码:
package main
import (
"bytes"
"encoding/binary"
"fmt"
"strconv"
)
func int2Str16(n int) string {
return strconv.FormatInt(int64(n), 16)
}
func int2bytes(n int) []byte {
x := int32(n)
bytesBuffer := bytes.NewBuffer([]byte{})
_ = binary.Write(bytesBuffer, binary.BigEndian, x)
return bytesBuffer.Bytes()
}
func bytes2int(b []byte) int {
bytesBuffer := bytes.NewBuffer(b)
var x int32
_ = binary.Read(bytesBuffer, binary.BigEndian, &x)
return int(x)
}
func main() {
// 0x5AF3ACA48850
pqStr := string([]byte{0x17, 0xED, 0x48, 0x94, 0x1A, 0x08, 0xF9, 0x81}) // length=8
pqByte := []byte(pqStr) // [23 237 72 148 26 8 249 129]
pqInt := bytes2int(pqByte) // 401426580
pqStr16 := int2Str16(pqInt) // 17ed4894
fmt.Printf("pqStr16=%+v pqStr=%s pqInt=%+v pqByte=%+vn", pqStr16, pqStr, pqInt, pqByte)
n2 := 0x5AF3ACA48850 // 10进制值=100002620016720 16进制值=0x5AF3ACA48850
n2Str16 := int2Str16(n2) // 5af3aca48850
n2Byte := int2bytes(n2) // [172 164 136 80]
n2Int := bytes2int(n2Byte) // -1398503344
n2Int16 := int64(n2Int) // -1398503344
fmt.Printf("n2=%v n2Str16=%s n2Byte=%v n2Int=%v n2Int16=%vn", n2, n2Str16, n2Byte, n2Int, n2Int16)
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
因此:
[172 164 136 80]
而如何才可以得到这种输出?[]byte{0x17, 0xED, 0x48, 0x94, 0x1A, 0x08, 0xF9, 0x81}
因为需要直接填入到代码中,不能直接写数值。int 转 byte 之后,得到的是
[0 0 90 243 172 164 136 80]
,因此填入代码应该是这么写:如果你需要使用16进制写法的话. 你手动算一下就行了,也可以在线工具算一下:
你上面的写法的问题在于.
0x5AF3ACA48850
数值太大了,超过了int32
的最大值,溢出了,应该使用的是 int64 去转换.还有我转换的结果与你的不相等,不知道是否你的是正确与否