Nodejs buffer bitwise slicing

Estoy transmitiendo datos a través del bluetooth LE desde un chip al servidor node.js.

Código de firmware:

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

Básicamente, el primer 10 bit es superior y el siguiente 10 bit es inferior. Podría imprimir el búfer en node.js:

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

¿Cómo puedo analizar esto en javascript y node.js sin hacer manipulación de bits?

No estoy seguro de por qué no quieres hacer manipulación de bits. JavaScript puede hacer bien la manipulación de bits. Las cosas de manipulación de bit C pueden ni siquiera necesitar ser cambiadas, o solo un poco.

Las matrices de JavaScript pueden acelerar un poco las cosas. Verifique dos veces la versión de Node y vea los documentos de Buffer. Tienen algunos métodos como readUInt8, etc. que pueden ayudar.

También puede manipular los bits como una cadena si es más fácil (y si no es demasiado lento), luego use parseInt('01010101',2) para convertir un número. También .toString(2) para convertir a binario.

Lea su int sin firmar del búfer usando las operaciones incluidas ( https://nodejs.org/api/buffer.html#buffer_buf_readuintle_offset_bytelength_noassert )

Use esencialmente los mismos operadores bitwise que hizo en C ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators )

Tenga en cuenta que >>> es el turno de extensión sin signo, que será importante en este caso si no obtiene aleatoriamente un grupo de 1s en lugar de 0s.

Bueno, podría usar el nuevo Uint1Array “Falta el TypedArray de JavaScript”, que es básicamente un campo de bits, con la misma API que cualquier otra matriz con tipo.

Así que en tu caso:

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