在Javascript中从缓冲区读取C ++浮点值

时间:2014-07-02 06:49:11

标签: javascript c++ struct floating-point

目前我正在开发一些客户端(html5)< - > node.js< - > server(c ++)项目。 服务器向我发送结构化数据(标准C ++结构)。我在node.js中读取字符,数组和int32没有问题,但我无法正确读取浮点值。

当我尝试将其视为整数时 - 结果我得到大数字。

例如: 目标值约为280 缓冲区的重读值为:1133248512

如何使用C ++ struct buffer将C ++ float值映射到javascript float值?

1 个答案:

答案 0 :(得分:0)

您所看到的是32位Float的原始位格式。这应该可以将它转换为本机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);
}