目前我正在处理一些客户端(html5)<->node.js<->服务器(c++) 项目。 服务器向我发送结构化数据(标准 C++ 结构)。我在 node.js 中读取字符、数组和 int32 没有问题,但我无法正确读取浮点值。
当我尝试将其视为整数时 - 结果我得到了很大的数字。
例如: 目标值在280左右 从缓冲区读取的值为:1133248512
如何使用 C++ 结构缓冲区将 C++ 浮点值映射到 javascript 浮点值?
最佳答案
您看到的是 32 位 float 的原始位格式。这应该可以将其转换为 native javascript double:
function f32bit_double(x) {
// handle sign bit
if (x < 0) {
x += 2147483648;
s = -1;
} else {
s = 1;
}
r = x % 8388608; // raw significand
e = (x-r) >> 23; // raw exponent
if (e === 0) {
// subnormal
e -= 126;
r = r/8388608;
} else if (e == 255) {
// inf or nan
return r === 0 ? s*Infinity : NaN;
} else {
// normalised
e -= 127;
r = 1+r/8388608;
}
return s*r*Math.pow(2,e);
}
关于javascript - 在 Javascript 中从缓冲区读取 C++ 浮点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24524578/