2016-11-23 14 views
0

一部の値が半精度の浮動小数点(つまり、float16)であるバイナリファイルをアンパックする必要があります。"uint16"の値を半精度の浮動小数点(float16)に変換するにはどうすればよいですか?

仕様API dataView.getUint16(0)を使用してバイナリストリームから読み込みました。

uint16フォーマットback to float16`フォーマットの数値をJavaScriptで変換するにはどうすればよいですか?

+0

[こちら](https://en.wikipedia.org/wiki/Half- precision_floating-point_format) - ちなみに –

+0

を調べることができるかどうかを調べるには、javascriptには「float16」がないので、実際のfloat16に変換することはありません。これを 'Number'またはイベントa float32またはfloat64(Number) - あなたがしたいことが "float16"であれば、値を操作して "float16"を格納/書き込み/送信します - まず、uint16にあるバイナリデータを数値に変換する必要がありますそれを操作してからそれをuint16に変換してください –

答えて

1

Javascriptのすべての数値変数は、64ビット浮動小数点数(double型)として扱われます。

これをDataViewから変数に読み込むと、その形式になります。

dv.setUint16(0, 12); 
dv.getUint16(0); // >>> 12 

しかし、あなたはそれを自分でクランプについて注意する必要があります:

DataViewオブジェクト上のset*メソッドを使用すると、さまざまなパックされたフォームを使用してArrayBufferにバイトを設定することができ

dv.setUint16(0, -12); 
dv.getUint16(0); // >>> 65524 

のために署名済みint16:

dv.setInt16(0, -12); 
dv.getInt16(0); // >>> -12 
+0

"float16"をuint16と読んでみると、float64は魔法では得られません。浮動小数点16の1はバイナリ「0 01111 0000000000」です。これはuint16として読み込むと「15,360」と読み込まれます。 –

+0

これは変数に読み込まれるとバッキングストアがfloat64になり、それを変換する必要はありませんそれを署名する。 –

+0

はい、問題は変換しています –

関連する問題