gpt4 book ai didi

go - binary.Uvarint 得到了比预期错误的 int 值

转载 作者:IT王子 更新时间:2023-10-29 01:40:04 29 4
gpt4 key购买 nike

我有一个 4 长度的 slice 存储一个像这样的 int 值:

[159 124 0 0]

然后我尝试了 val, encodeBytes := binary.Uvarint(slice),但是出错了 val:

val = 15903, encodebytes = 2

正确的val应该是31903,有什么问题吗?

代码如下:

http://play.golang.org/p/kvhu4fNOag

最佳答案

根据二进制包文档,用于解释字节序列的编码是 available here .它指定字节被解释为:

Each byte in a varint, except the last byte, has the most significant bit (msb) set – this indicates that there are further bytes to come. The lower 7 bits of each byte are used to store the two's complement representation of the number in groups of 7 bits, least significant group first.

[159 124 0 0]的二进制表示是:

1001  1111 , 0111 1100 , 0000  0000, 0000 0000

第一个字节的最高有效位 (MSB) 已设置,因此第二个字节也将被解释。第二个字节 MSB 未设置,因此其余字节将被忽略。

通过删除字节的 MSB 来解释我们得到的位:

001 1111 , 111 1100 

这两组在被解释为数字之前被颠倒:

111 1100 , 001 1111

concatenated:
0011 1110 0001 1111

将其转换回十进制我们得到:

1 + 2 +4 + 8 + 16 + 0 + 0 + 0 + 0 + 512 + 1024 + 2048 + 4096 + 8192 = 15903

正如 James 和 peterSO 的帖子所示,您可能想改用 binary.LittleEndian.Uint32

关于go - binary.Uvarint 得到了比预期错误的 int 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21849857/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com