将单精度big-endian浮点值转换为JavaScript浮点值

Single precision big endian float values to JavaScript floats

本文关键字:JavaScript 转换 big-endian 单精度 精度      更新时间:2023-09-26

我收到来自Arduino的浮点值,格式如下:

'0000803E' = 0.25
'00002041' = 10
'68414843' = 200.2555

在Java(处理)中,我可以做到这一点:

float decodeFloat(String inString) {
  byte [] inData = new byte[4];
  if(inString.length() == 8) {
    inData[0] = (byte) unhex(inString.substring(0, 2));
    inData[1] = (byte) unhex(inString.substring(2, 4));
    inData[2] = (byte) unhex(inString.substring(4, 6));
    inData[3] = (byte) unhex(inString.substring(6, 8));
  }
  int intbits = (inData[3] << 24) | ((inData[2] & 0xff) << 16) | ((inData[1] & 0xff) << 8) | (inData[0] & 0xff);
  return Float.intBitsToFloat(intbits);
}

是否有一个实用程序NPM包/函数/库可以进行转换,或者我如何在JS中进行转换?

我能够在jspack包的帮助下完成部分转换。

const jspack = require('jspack').jspack;
function decodeFloat(inString){
        let inData = [];
        inData[0] = parseInt(inString.substring(0, 2), 16);
        inData[1] = parseInt(inString.substring(2, 4), 16);
        inData[2] = parseInt(inString.substring(4, 6), 16);
        inData[3] = parseInt(inString.substring(6, 8), 16);
        return jspack.Unpack('<f', inData)[0];
}
let hexFloats = ['0000803E','00002041','68414843'];
console.log(hexFloats.map(decodeFloat)); // [ 0.25, 10, 200.2554931640625 ]