猿问

将字节切片中的数据解码为 Uint32

package main


import (

        "bytes"

        "encoding/binary"

        "fmt"

)


func main() {

        aa := uint(0xFFFFFFFF)

        fmt.Println(aa)

        byteNewbuf := []byte{0xFF, 0xFF, 0xFF, 0xFF}

        buf := bytes.NewBuffer(byteNewbuf)

        tt, _ := binary.ReadUvarint(buf)

        fmt.Println(tt)

}

需要将 4 字节数组转换为 uint32 但为什么结果不一样?版本:beta 1.1


慕尼黑5688855
浏览 175回答 3
3回答

慕标琳琳

您可以使用包中的ByteOrder对象之一执行此操作encoding/binary。例如:package mainimport (        "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.

天涯尽头无女友

tt := uint32(buf[0])<<24 | uint32(buf[1])<<16 | uint32(buf[2]) <<8 |&nbsp; &nbsp; &nbsp; &nbsp; uint32(buf[3])为 BE 或tt := uint32(buf[0]) | uint32(buf[1])<<8 | uint32(buf[2]) <<16 |&nbsp; &nbsp; &nbsp; &nbsp; uint32(buf[3]) <<24对于 LE。[u]varint 是一种不同的编码(32 位数字在编码形式中最多可以有 5 个字节,64 位数字最多可以有 10 个字节)。无需为 []byte 创建缓冲区。直接在字节切片上使用 Varint 或 Uvarint。你扔掉了函数返回的错误。第二个结果表明读取了多少字节或是否存在问题。存在是一个问题,而解码0xff的,0xff的,0xff的,0xff的作为uvarint。
随时随地看视频慕课网APP

相关分类

Python
我要回答