我试图了解以下代码发生了什么。
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
为什么这些位不准确?想知道缓冲区的十六进制是否只是内存地址?希望有人能澄清一下。 :-)
最佳答案
首先,缓冲区不是按十六进制数字分组,而是按八位字节(字节)分组,因此您应该将这些位按 8 组而不是 4 组分组。
这些组中的每一个都只是简单地颠倒过来。这是因为人类可读的表示是 big-endian ,当您读取索引 0
处的位时,它就是最右边的。因此,如果您从流中逐位读取它们,您将从右向左读取每个字节。
关于javascript - 为什么位缓冲区和缓冲区给我不同的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49254886/