我需要帮助确定以下数字格式。
例如,MIB中的以下数字格式:
0x94 0x78 = 2680
0x94 0x78 in binary: [1001 0100] [0111 1000]
似乎如果MSB为1,则表示其后跟着另一个字符。如果是0,那就是数字的结尾。
因此值2680为[001 0100] [111 1000]
,格式正确为[0000 1010] [0111 1000]
这个数字格式被称为什么,除了位操作和转移到更大的无符号整数之外,有什么好的计算方法?
答案 0 :(得分:1)
我看到这个被称为7bhm(7位有更多)或VLQ(可变长度数量);见http://en.wikipedia.org/wiki/Variable-length_quantity
这是存储大端(最重要的字节优先),而不是Encoding an integer in 7-bit format of C# BinaryReader.ReadString
中描述的C#BinaryReader.Read7BitEncodedInt方法除了位操作之外,我不知道任何解码方法。
可以在以下位置找到示例PHP代码 http://php.net/manual/en/function.intval.php#62613
或在Python中我会做类似
的事情def encode_7bhm(i):
o = [ chr(i & 0x7f) ]
i /= 128
while i > 0:
o.insert(0, chr(0x80 | (i & 0x7f)))
i /= 128
return ''.join(o)
def decode_7bhm(s):
o = 0
for i in range(len(s)):
v = ord(s[i])
o = 128*o + (v & 0x7f)
if v & 0x80 == 0:
# found end of encoded value
break
else:
# out of string, and end not found - error!
raise TypeError
return o