为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕尼黑5688855 2021-06-01 13:08:22
package mainimport (        "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
查看完整描述

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.



查看完整回答
反对 回复 2021-06-07
?
天涯尽头无女友

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。


查看完整回答
反对 回复 2021-06-07
  • 3 回答
  • 0 关注
  • 173 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信