javascript - 为什么位缓冲区和缓冲区给我不同的输出?

标签 javascript node.js

我试图了解以下代码发生了什么。

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/

相关文章:

java - 如何用 3 个给定点计算 arcTo() 的半径?

javascript - 如何将复选框值从 HTML 发送到 Node JS?

javascript - 仅使用客户端 js 的 Paypal 订阅

node.js - 使用 Node-Schedule 开始 BotBuilder 对话

javascript - iOS 旋转照片问题

javascript - forEach在javascript中同时遍历两个数组

javascript - JSON.parse( ) 的数值变化

node.js - Mongoose 协会

Node.JS HTTP 请求超时

node.js - 如何使用 sailsjs 在 MongoDb 中存储和检索图像?