Nodejs tampon tranchant au niveau du bit

Je transmets des données via Bluetooth LE d’une puce au serveur node.js.

Code du micrologiciel:

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

Fondamentalement, le premier 10 bit est en haut et le prochain 10 bit est en bas. Je pourrais imprimer le tampon dans node.js:

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

Comment puis-je parsingr cela en javascript et node.js sans faire de manipulation de bits?

Vous ne savez pas pourquoi vous ne voulez pas faire de manipulation de bits. JavaScript peut très bien manipuler les bits. La manipulation des bits C n’a peut-être même pas besoin d’être modifiée, ou seulement un peu.

Les tableaux typés JavaScript peuvent accélérer les choses un peu. Vérifiez la version de votre nœud et consultez la documentation de la mémoire tampon. Ils ont des méthodes comme readUInt8 etc. qui pourraient aider.

Vous pouvez aussi manipuler les bits sous forme de chaîne si c’est plus facile (et si ce n’est pas trop lent), utilisez ensuite parseInt('01010101',2) pour convertir en nombre. Aussi .toSsortingng(2) à convertir en binary.

Lisez votre entier non signé dans le tampon en utilisant les opérations incluses ( https://nodejs.org/api/buffer.html#buffer_buf_readuintle_offset_bytelength_noassert )

Utilisez essentiellement les mêmes opérateurs que vous avez utilisés en C ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators )

Notez que >>> est le décalage qui ne s’étend pas sans signe, ce qui sera important dans ce cas si vous n’obtenez pas au hasard un groupe de 1 au lieu de 0!

Vous pouvez utiliser le nouveau ” TypedArray manquant de JavaScript” de Uint1Array, qui est en gros un champ de bits, avec la même API que tous les autres types de tableaux.

Donc dans votre cas:

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