[英]JavaScript Node.Js Buffers to Binary
我在 Node.JS 缓冲区的帮助下发送和接收数据包,但我不确定如何将这些缓冲区转换为二进制表示形式。 我试过了,但没用
let buff = Buffer.alloc(10);
buff[0] = 10;
buff[1] = 16;
buff[2] = 20;
buff[3] = 32;
buff[4] = 9;
console.log(buff);
console.log(buff.toString('binary'));
根据文档'binary'
是'latin1'
的别名
如果你想要一个二进制表示,最简单的方法是获取缓冲区的字符串表示,只有1
和0
是将缓冲区转换为十六进制表示,然后将此表示解析为 BigInt,获取 BigInt 的基数 2,最后用不重要的零填充字符串
function buf2bin (buffer) {
return BigInt('0x' + buffer.toString('hex')).toString(2).padStart(buffer.length * 8, '0')
}
如果您要问的是您想要 Buffer 中每个单独字节的字符串表示(以二进制表示)全部组合成一个字符串,每个字节都有空格分隔符,那么您可以这样做:
function convertBufferToBinaryString(buf, len) {
let result = [];
for (let i = 0; i < len; i++) {
result.unshift(buf[i].toString(2).padStart(8, "0"));
}
return result.join(" ");
}
// sample usage
let buff = Buffer.alloc(10);
buff[0] = 10;
buff[1] = 16;
buff[2] = 20;
buff[3] = 32;
buff[4] = 9;
let str = convertBufferToBinaryString(buff, 5);
console.log(str);
由于这是自定义 output 格式,因此没有内置方法可以执行此操作。 您可以使用.toString(2)
将任何单个数字转换为二进制字符串表示,但要组合缓冲区中每个单独字节的二进制字符串表示,您必须自己构建组合结果(如上所示)。
注意:此实现假定您希望缓冲区的[0]
元素位于结果字符串的右端。 这就是它在构建结果数组时使用.unshift()
的原因。 如果您希望[0]
元素位于字符串的左端,请改用.push()
。
使用padStart
组合简单地reduce
为字符串。
const buff = Buffer.alloc(10);
buff[0] = 10;
buff[1] = 16;
buff[2] = 20;
buff[3] = 32;
buff[4] = 9;
const paddedBinString = buff.reduce(
(acc, byte) => (acc += byte.toString(2).padStart(8, "0")),
""
);
console.log(paddedBinString);
// 00001010 00010000 00010100 00100000 00001001 00000000 00000000 00000000 00000000 00000000
我是这样做的:
const hexChar2bin = c =>
({
0: '0000',
1: '0001',
2: '0010',
3: '0011',
4: '0100',
5: '0101',
6: '0110',
7: '0111',
8: '1000',
9: '1001',
a: '1010',
b: '1011',
c: '1100',
d: '1101',
e: '1110',
f: '1111',
}[c]);
export default function buf2bin(buf) {
return buf.toString('hex').split('').map(hexChar2bin).join('');
}
console.log(buf2bin(Buffer.from(' '))); // 00100000 (space character is decimal 32)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.