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?

Answer1:

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.

Answer2:

Read your unsigned int from the buffer using included operations (https://nodejs.org/api/buffer.html#buffer_buf_readuintle_offset_bytelength_noassert)

Use essentially the same bitwise operators that you did in C (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators)

Note that >>> is the non-sign extending shift, which will be important in this case if you don't to randomly get a bunch of 1s instead of 0s!

Answer3:

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);

人吐槽 人点赞

Recommend

Comment

用户名: 密码:
验证码: 匿名发表

你可以使用这些语言

查看评论:Nodejs buffer bitwise slicing