2016-12-05 4 views
1

私は2つの16ビット整数生データを持っています。例えば2つの16ビット整数(上位ワード/下位ワード)を32ビット浮動小数点に変換するには?


上位ワード= 17142(12月)または0100001011110110(バイナリ)
下位ワード= 59759(12月)または1110100101111001(バイナリ)

使用すると、1つの32ビット浮動小数点データとして2つの単語を扱う場合、それは "123.456"
バイナリになります - > JavaScriptで整数配列[59759、17142] floatへの123.456を変換する方法01000010111101101110100101111001

注:[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);

をここでは逆の順序でint型を書い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それが動作します!素晴らしい答えに感謝します〜 –

関連する問題