Node.JS以不均匀的偏移量反序列化浮点数

这个问题涉及我以前的问题:

Nodejs缓冲按位切片

我通过蓝牙LE将数据传输到node.js服务器。 这里是序列化数据的格式:

top: 10 bit (unsigned integer) bottom: 10 bit (unsigned integer) accelerometerX: 23 bit (truncated 32-bit floating point) accelerometerY: 23 bit ... 

数据作为node.js缓冲区接收。 我能够parsing顶部和底部,因为它们是整数,我可以使用它们的移位操作。

 top = data.readUInt16LE() & 0x3FF; bottom = data.readUInt16LE(1); bottom = (bottom >> 2) & 0x3FF; accX = data.readUInt32LE(2); accX = ((accX >> 4) & 0x7FFFFFF) << 9; 

但是,对于ACCX浮动。 我不能使用node.js中的ReadFloat32LE,因为它不是字节alignment的。 所以现在我正在读uint32,把它换成9个最不重要的数字。 如何从NodeJS中的位表示获得浮点数?

这不是一个漂亮的解决scheme,但您可以使用另一个缓冲区来进行这种转换:

 function intToFloat(integer) { let buf = Buffer.alloc(4); buf.writeUInt32LE(integer); return buf.readFloatLE(); } 

编辑:

还有另一种解决scheme,它也可以在现代浏览器环境下工作:

 function intToFloat(integer) { let intArray = new Uint32Array([ integer ]); let floatArray = new Float32Array(intArray.buffer); return floatArray[0]; }