2016-08-02 3 views
1

はのは、私は文字列として進値を持っているとしましょう:16進ビットパターン(文字列として)をNode.jsで浮動小数点に変換するにはどうすればいいですか?

var hexValue = "0x43480000"; 

どのように私はNode.jsの中でそれを解析し、数(フロート)に変換することができますか? 同様:Hex値は、IEEE-754の浮動小数点数のビットパターンであることを意味すること

var parsedNumber = hexStringToNumber(hexValue); // -> 200.0 

注意。その結果は、parseInt("0x43480000")のように、1128792064ではなく、200です。

答えて

2

(以下OPによって明確化により廃止)

parseIntMDN | spec)あなたのためにそのフォーマットを用いて、16進数を解析完全に満足している:

var hexValue = parseInt("0x43480000"); 
 
console.log(hexValue);

最初に0xが表示され、16進数と見なされます。接頭辞("43480000")を持たない16進数の文字列がある場合は、parseIntに基数16(16進数)を使用するように指示するには、parseInt(str, 16)を使用します。しかし、あなたは接頭辞を持っているので、必要はありません。

結果はJavaScript番号になります。by definitionは "double"(IEEE-754倍精度バイナリ浮動小数点数)です。


あなたは0x43480000が200.0として出て来てほしいと述べました。つまり、実際にはの括弧を解析していないことを意味します。つまり、IEEE-754浮動小数点数のビットパターンを含む文字列を16進数で表し、等価なIEEE-754浮動小数点数を取得しようとしています。これは「ヘックスを解析する」とはまったく異なります。

あなたが参照したcalculatorは、IEEE-754 -precision 2進浮動小数点値で動作します。 0x43480000ビットパターンは、double -precisionバイナリ浮動小数点では200ではありません。しかし、0x40690000はです。それを行うには私の知っている

のみ簡単方法がDataViewである:

var dv = new DataView(new ArrayBuffer(8)); 
 
dv.setUint32(0, parseInt("0x40690000")); 
 
var num = dv.getFloat64(0) 
 
console.log(num);

あなたは単一精度のバージョン(0x43480000)を変換したい場合は、Iドンあなたのためにそれを行うことになるものは何もないと思います。仮数と指数のビットを分離し、拡大を行い、次に上記を行います。

+0

しかし、それはそれfloatまたはdoubleことはありません。 –

+0

@HarmjanKors:そうです。 JavaScriptの数値はすべてdouble型(IEEE-754倍精度バイナリ浮動小数点数)です。私は言っただろうが、私はあなたがあなたの質問を表現する方法からそれを知っていたと思った。 :-) –

+0

はい私は知っている:)しかし、 'parseInt(" 0x43480000 ")'の結果は '1128792064'ですが、私は値' 200.0'を受け取りたいと思います(例:http://www.h-schmidt .net/FloatConverter/IEEE754.html)。 –

1

ノード。JS Bufferクラスがこの機能を提供します。

var buf = new Buffer("43480000", "hex"); 
var number = buf.readFloatBE(0); 
console.log(number); // 200 

も参照してください。

+0

うまくやったが、本当にあなたがしたことは、この質問が最初のリンクの複製であることを証明することです。あなたはまだコメントすることはできません(あなたはすぐに50代以上になることができます)。しかし、できることは、オリジナルの質問へのリンクを複製のコメントとして投稿することです。 –

関連する問題