2017-08-01 38 views
0

Javascriptで16進文字列を浮動小数点数に変換しようとしています。16進数から浮動小数点へ - Javascript

私は16進数の文字列 "0082d241"を持っているとします。 this online converterを使用し、スワップエンディアンのを選択すると、正しいフロート値は26,3135になります。

これはTMP36センサのものなので、これが正しい答えです。

Converting hexadecimal to float in javascriptのように私がここで見つけたいくつかの他の例を試しましたが、それらのどれも働いていませんでした。

答えて

1

最初の手順は、表示したpageにあるソースコードを使用して、エンディアンをスワップすることです。

次に、16進文字列をfloat値に変換できます。後半の応答のため申し訳ありません

function flipHexString(hexValue, hexDigits) { 
 
    var h = hexValue.substr(0, 2); 
 
    for (var i = 0; i < hexDigits; ++i) { 
 
    h += hexValue.substr(2 + (hexDigits - 1 - i) * 2, 2); 
 
    } 
 
    return h; 
 
} 
 

 

 
function hexToFloat(hex) { 
 
    var s = hex >> 31 ? -1 : 1; 
 
    var e = (hex >> 23) & 0xFF; 
 
    return s * (hex & 0x7fffff | 0x800000) * 1.0/Math.pow(2, 23) * Math.pow(2, (e - 127)) 
 
} 
 

 
console.log(hexToFloat(flipHexString("0x0082d241", 8))); 
 
console.log(hexToFloat(flipHexString("0x5d7e2842", 8)));

+0

が、これは常に同じ値を返します。measurmentが何であれ26.3134765625を。 (私はあなたのコードの最後の行に "0x0082d241"を変更しました。 " – kots

+0

@kotsコードに何か間違っているはずです。私はあなたの結果を2つの異なる16進文字列で表示するために動作するコードスニペットを追加しました。 – Teh

+0

問題がありますか?おそらく、私はノードの赤を使用しているからでしょうか?ここで私はそれをどのように使用しています: ms = msg.payload.data; function flipHexString(hexValue、hexDigits){ var h = hexValue.substr(0、2); 戻りH; } 機能; { H + = hexValue.substr - ( - 1 I)* 2、2 2 +(hexDigits)}(; iはhexDigitsを<++ I VAR I = 0)のための hexToFloat(hex){ var s = 16進数>> 31 -1:1; var e =(16進数>> 23)& 0xFF; return s *(16進数および0x7fffff | 0x800000)* 1.0/Math.pow(2、23)* Math.pow(2、(e-127)); } msg.payload = hexToFloat(flipHexString(ms、8)); 返信msg; @Teh – kots

関連する問題