Dzung Nguyen
Dzung Nguyen

Reputation: 3944

Nodejs buffer bitwise slicing

I'm transmitting data through bluetooth LE from a chip to node.js server.

Firmware code:

uint16_t txBuf[5]
top &= 0x3FF;
bottom &= 0x3FF;
txBuf[0] = top + (bottom << 10);
txBuf[1] = bottom >> 2;

Basically, the first 10 bit is top, and the next 10 bit is bottom. I could print the buffer in node.js:

console.log(buffer)
console.log(buffer.data)

<Buffer cd d3 8d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00>
20

How can I parse this in javascript and node.js without doing bit manipulation?

Upvotes: 4

Views: 3779

Answers (2)

authorized
authorized

Reputation: 51

Well you could use the new Uint1Array "JavaScript's missing TypedArray" which is basically a bit field, with the same API as every other Typed Array.

So in your case:

const Uint1Array = require('uint1array');
const bits = new Uint1Array( new Uint8Array(txBuf).buffer );
const top = bits.slice(0,10);
const bottom = bits.slice(10,20);

Upvotes: 2

Jason Livesay
Jason Livesay

Reputation: 6377

Not sure why you don't want to do bit manipulation. JavaScript can do bit manipulation fine. The C bit manipulation stuff might not even need to be changed, or only a little.

JavaScript typed arrays may speed things up a bit. Double check your Node version and see the Buffer docs. They have some methods like readUInt8 etc. that might help.

Also you can manipulate bits as string if its easier (and if its not too slow), then use parseInt('01010101',2) to convert to a number. Also .toString(2) to convert to binary.

Upvotes: 1

Related Questions