【问题标题】:How To Convert Two 16bit Integer (High Word / Low Word) into 32bit Float?如何将两个 16 位整数(高位字/低位字)转换为 32 位浮点数?
【发布时间】:2017-04-19 15:19:37
【问题描述】:

我有两个 16 位整数原始数据。

例如:
高位字 = 17142(十进制)或 0100001011110110(二进制)
低位字 = 59759(十进制)或 1110100101111001(二进制)

如果将两个字一起视为一个 32 位浮点数据,它将是“123.456”
二进制 --> 01000010111101101110100101111001

如何在 Javascript 中将整数数组 [59759 , 17142] 转换为浮点数 123.456?

注意:[ X (16bit low word) , Y (16 bit high word) ] ==> Z (32bit float)

【问题讨论】:

    标签: javascript


    【解决方案1】:

    您可以使用typed arrays 和ArrayBuffer 执行此操作,这允许您以不同的方式解释相同的位(但字节序是特定于平台的)。也可以在缓冲区上使用DataView,这可以让您控制字节顺序。

    这是适用于我平台的字节序的类型化数组方法,请参阅 cmets:

    // Create a buffer
    var buf = new ArrayBuffer(4);
    // Create a 16-bit int view of it
    var ints = new Uint16Array(buf);
    // Fill in the values
    ints[0] = 59759;
    ints[1] = 17142;
    // Create a 32-bit float view of it
    var floats = new Float32Array(buf);
    // Read the bits as a float; note that by doing this, we're implicitly
    // converting it from a 32-bit float into JavaScript's native 64-bit double
    var num = floats[0];
    // Done
    console.log(num);

    这是DataView 方法,注意以相反的顺序编写整数:

    // Create a buffer
    var buf = new ArrayBuffer(4);
    // Create a data view of it
    var view = new DataView(buf);
    // Write the ints to it
    view.setUint16(0, 17142);
    view.setUint16(2, 59759);
    // Read the bits as a float; note that by doing this, we're implicitly
    // converting it from a 32-bit float into JavaScript's native 64-bit double
    var num = view.getFloat32(0);
    // Done
    console.log(num);

    【讨论】:

    • @Crowder 它有效!非常感谢您的精彩回答~
    猜你喜欢
    • 2011-10-25
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 1970-01-01
    • 2010-12-12
    • 2015-09-30
    相关资源
    最近更新 更多