我试图通过以下代码了解正在发生的事情。
console.log(buffer);
>>> <Buffer d6 16 06 37 f7 42 56 f6 45 56 37 47 27 e3 22 36 07 07 e0 c0 b9 85 d9 01 58 db 1b 59 19 db dc 0b 1c 5b 58 5e 99 dc cb 58 dd 1c dd 5b db 17 1c 5b 58 5e ... >
如果我将一些十六进制小数转换为二进制,我得到以下位。
1101 0110 0001
但我随后将其转换为比特流(https://github.com/inolen/bit-buffer),然后读取这些位。
const test = new bitBuffer.BitStream(buffer);
console.log(test.readBits(1, false));
console.log(test.readBits(1, false));
console.log(test.readBits(1, false));
console.log(test.readBits(1, false));
console.log(test.readBits(1, false));
console.log(test.readBits(1, false));
console.log(test.readBits(1, false));
console.log(test.readBits(1, false));
console.log(test.readBits(1, false));
console.log(test.readBits(1, false));
console.log(test.readBits(1, false));
console.log(test.readBits(1, false));
0110 1011 0110
为什么这些位不准确?想知道缓冲区的十六进制是否仅仅是ram地址?希望有人可以清理它。 :-)
答案 0 :(得分:1)
首先,缓冲区不是分组为十六进制数字而是分组为八位字节(字节),因此您应该将这些位分为8个而不是4个。
这些组中的每一组都被简单地颠倒了。那是因为人类可读的表示是big-endian,当你读到最右边的索引0
的位时。因此,如果您从流中逐位读取它们,则从右到左读取每个字节。