3 回答
TA贡献1830条经验 获得超9个赞
您可以使用包中的ByteOrder对象之一执行此操作encoding/binary。例如:
package main
import (
"encoding/binary"
"fmt"
)
func main() {
aa := uint(0x7FFFFFFF)
fmt.Println(aa)
slice := []byte{0xFF, 0xFF, 0xFF, 0x7F}
tt := binary.LittleEndian.Uint32(slice)
fmt.Println(tt)
}
如果您的数据采用大端格式,则可以在binary.BigEndian.
TA贡献1831条经验 获得超9个赞
tt := uint32(buf[0])<<24 | uint32(buf[1])<<16 | uint32(buf[2]) <<8 |
uint32(buf[3])
为 BE 或
tt := uint32(buf[0]) | uint32(buf[1])<<8 | uint32(buf[2]) <<16 |
uint32(buf[3]) <<24
对于 LE。
[u]varint 是一种不同的编码(32 位数字在编码形式中最多可以有 5 个字节,64 位数字最多可以有 10 个字节)。
无需为 []byte 创建缓冲区。直接在字节切片上使用 Varint 或 Uvarint。
你扔掉了函数返回的错误。第二个结果表明读取了多少字节或是否存在问题。存在是一个问题,而解码0xff的,0xff的,0xff的,0xff的作为uvarint。
添加回答
举报