如何将十六进制字节切片转换为32位十进制整数?
将字节切片转换回原32位十进制数值的方法
问题背景
将十进制整数1662489944存入文件前,先转换为8位十六进制字符串,再解码为字节写入文件,代码如下:
str := fmt.Sprintf("%08x", 1662489944) b, _ := hex.DecodeString(str) file.Write(b) // 实际写入的字节对应为63 17 95 58
读取文件后得到字节切片:[]byte{63, 17, 95, 58},需将该切片转换回原32位十进制数值1662489944。
解决方法
由于写入的是大端字节序的32位无符号整数(%08x格式化输出的是大端十六进制字符串),可使用binary.BigEndian.Uint32()方法将字节切片解析为uint32类型,直接得到原数值。
示例代码:
package main import ( "encoding/binary" "fmt" ) func main() { b := []byte{63, 17, 95, 58} // 按大端字节序解析字节切片为32位无符号整数 val := binary.BigEndian.Uint32(b) fmt.Println(val) // 输出:1662489944 }
验证说明
原数值1662489944的十六进制表示为6317953A,对应字节依次是0x63(63)、0x17(17)、0x95(95)、0x3A(58),与读取到的字节切片完全匹配,因此用大端字节序解析是正确的。
内容的提问来源于stack exchange,提问作者Dallin
相关产品推荐
相关产品推荐

