我有两个16位整数的原始数据。
例如:
高字= 17142 (12)或0100001011110110 (二进制)
低字= 59759 (12)或1110100101111001 (二进制)
如果将两个字放在一起作为一个32位浮动数据,它将是"123.456“。
二进制->01000010111101101110101011110011001
如何将整数数组59759,17142转换为Javascript中的浮点数123.456?
注:X (16位低字),Y(16位高字) ==> Z(32位浮点数)
发布于 2016-12-05 09:22:24
您可以使用类型化数组和ArrayBuffer
来实现这一点,这允许您以不同的方式解释相同的位(但endianness是特定于平台的)。在缓冲区上使用DataView
也是可能的,它允许您控制endianness。
下面是类型化数组方法,它与我的平台的特性一起工作,请参见注释:
// 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
方法,注意按相反的顺序写入ints:
// 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);
https://stackoverflow.com/questions/40970739
复制相似问题