M*******8 发帖数: 85 | 1 下面的例子是怎么把0xA0 转为 0x81 和 0x20 的? 看不懂, 能不能给讲讲, 谢谢
How to transfer an integer to multi-byte integer format?
For example, the integer value 0xA0 would be encoded with the two-byte
sequence 0x81 0x20. The integer value 0x60 would be encoded with the one-
byte sequence 0x60. |
D****A 发帖数: 360 | 2 interesting. 估计是每个byte取一位做连接符, 是1就看下一个byte否则结束
每个byte只有7位有效位,两个byte应该能表示一个integer的低14位
0xA0=10100000
0x81=10000001
0x20=00100000
因为一个byte只能encode7位,所以0xA0的最高位1应该在0x81里的有效最低位,
另外0xA0的低7位应该在0x20里,0xA0和0x20的低七位相通,说明这种encoding
把每个byte的最高位用做连接符了
综上转换公式应该是 do x = (x << 7)|(b[i] & 0x7f) until (b[i] & 0x80) == 0
【在 M*******8 的大作中提到】 : 下面的例子是怎么把0xA0 转为 0x81 和 0x20 的? 看不懂, 能不能给讲讲, 谢谢 : How to transfer an integer to multi-byte integer format? : For example, the integer value 0xA0 would be encoded with the two-byte : sequence 0x81 0x20. The integer value 0x60 would be encoded with the one- : byte sequence 0x60.
|
M*******8 发帖数: 85 | 3 多谢指点!
这个
do x = (x << 7)|(b[i] & 0x7f) until (b[i] & 0x80) == 0
是从multi-byte integer format转为regular integer 吧?
如何从integer转为 multi-byte integer format? 谢谢
【在 D****A 的大作中提到】 : interesting. 估计是每个byte取一位做连接符, 是1就看下一个byte否则结束 : 每个byte只有7位有效位,两个byte应该能表示一个integer的低14位 : 0xA0=10100000 : 0x81=10000001 : 0x20=00100000 : 因为一个byte只能encode7位,所以0xA0的最高位1应该在0x81里的有效最低位, : 另外0xA0的低7位应该在0x20里,0xA0和0x20的低七位相通,说明这种encoding : 把每个byte的最高位用做连接符了 : 综上转换公式应该是 do x = (x << 7)|(b[i] & 0x7f) until (b[i] & 0x80) == 0
|
D****A 发帖数: 360 | 4 查信
【在 M*******8 的大作中提到】 : 多谢指点! : 这个 : do x = (x << 7)|(b[i] & 0x7f) until (b[i] & 0x80) == 0 : 是从multi-byte integer format转为regular integer 吧? : 如何从integer转为 multi-byte integer format? 谢谢
|