Javascript - 将十六进制转换为 IEEE-754 32 位单精度

Javascript - Convert hex to IEEE-754 32-bit single precision

提问人:Sathaporn Niltup 提问时间:10/16/2023 最后编辑:Sathaporn Niltup 更新时间:10/16/2023 访问量:33

问:

我正在尝试将以下十六进制字符串:“42AA4000”转换为 85.125 (float-32)

我正在尝试修改 Řrřola REF 的代码

这是我的代码(不起作用)

function hex_to_number(str) {
  // Pad the string with zeroes to 16 characters.
  // You can omit this if you control your inputs.
  str = (str + "0000000000000000").slice(0,16);

  // Split into bits: sign (1), exponent (11), significand (52).
  var sign_and_exponent_bits = parseInt(str.slice(0,3), 16);
  var sign = sign_and_exponent_bits >= 0x100 ? -1 : +1;
  var exponent_bits = sign_and_exponent_bits & ((1<<8) - 1);
  var significand_bits = parseInt(str.slice(3,16), 16);

  // Classify the floating-point value.
  if (exponent_bits == 0x0FF)  // infinity | not a number
    return significand_bits == 0 ? sign * Number.POSITIVE_INFINITY : Number.NaN;
  else if (exponent_bits == 0)  // zero | subnormal number
    return sign * Math.pow(2, 1-127-23) * significand_bits;
  else  // normal number
    return sign * Math.pow(2, exponent_bits-127-23) * (Math.pow(2, 23) + significand_bits);
}

我怎样才能得到一个javascript函数,给我需要的答案? 谢谢。

JavaScript 的IEEE-754

评论

0赞 Bergi 10/16/2023
呃,那个代码还是 64 位双精度数字?你的修改在哪里?

答:

2赞 Rory McCrossan 10/16/2023 #1

为此,您不需要任何外部代码 - 使用 DataView:

const dv = new DataView(new ArrayBuffer(4));
dv.setUint32(0, 0x42AA4000);
let output = dv.getFloat32(0);

console.log(output);

有关该对象的更多详细信息,请访问 MDNDataView