我有两个16位整数原始数据。
例如:
高位字= 17142(十进制)或0100001011110110(二进制)
低位字= 59759(十进制)或1110100101111001(二进制)
如果将两个字一起视为一个32位浮点数据,它将是“ 123.456”
二进制-> 01000010111101101110100101111001
如何在Javascript中将整数数组[59759,17142]转换为浮点型123.456?
注意:[X(16位低位字),Y(16位高位字)] ==> Z(32位浮点型)
您可以使用类型化数组和来执行此操作ArrayBuffer,它们可以用不同的方式解释相同的位(但字节序特定于平台)。也可以DataView在缓冲区上使用a ,以控制字节序。
这是与我的平台的字节序配合使用的类型化数组方法,请参见注释:
// 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);Run Code Online (Sandbox Code Playgroud)
这是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);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2108 次 |
| 最近记录: |