2016-12-05 776 views
1

我有两个16位整数原始数据。如何将两个16位整数(高位字/低位字)转换为32位浮点数?

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

如果对待两条字在一起作为一个32位的浮点数据,这将是 “123.456”
二进制 - > 01000010111101101110100101111001

如何整数数组[59759,17142]浮动123.456转换的Javascript?

注:X(16位低位字),Y(16位高字)] ==> Z(32位浮点)

回答

3

你可以用typed arraysArrayBuffer,它允许你去解释同样做到这一点位以不同的方式(但是字节序是平台特定的)。也可以在缓冲区上使用DataView,这可以让您控制字节顺序。

这里的类型数组的方式与我的平台的字节序的作品,看评论:

// 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);

+1

@Crowder It works!非常感谢你的回答 –

相关问题