提问人:Sathaporn Niltup 提问时间:10/16/2023 最后编辑:Sathaporn Niltup 更新时间:10/16/2023 访问量:33
Javascript - 将十六进制转换为 IEEE-754 32 位单精度
Javascript - Convert hex to IEEE-754 32-bit single precision
问:
我正在尝试将以下十六进制字符串:“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函数,给我需要的答案? 谢谢。
答:
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
评论