Reputation: 165
I am sending and receiving packets with the help of Node.JS Buffers but I am not sure how to convert these buffers into a binary representation. I tried this but it did not work
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'));
Upvotes: 7
Views: 3543
Reputation: 111
Here's how I do it:
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)
Upvotes: 0
Reputation: 1714
Simple reduce
to string with padStart
combination.
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
Upvotes: 2
Reputation: 146
Acording to the documentation 'binary'
is an alias for 'latin1'
If you want a binary representation the easiest way to get a string representation of the buffer with only 1
and 0
is to convert the buffer to hexadecimal his representation, then parse this representation into a BigInt, get the base 2 of the BigInt, and finally pad the string with non significant zeros
function buf2bin (buffer) {
return BigInt('0x' + buffer.toString('hex')).toString(2).padStart(buffer.length * 8, '0')
}
Upvotes: 4