2017-05-31 46 views
0

JavaScriptの10進数に変換する必要があるリトルエンディアン16進文字列があります。10進数のリトルエンディアン16進文字列の解析

例の16進文字列:「12AB34CD」 が、それはこれにバイトをスワップする必要が正しい値を取得するには:「CD34AB12」

は現在、私はただのparseInt()を使用し、その後、サブストリングを使用してバイトをスワップし。

var string = "12AB34CD"; 
var parsedInt = parseInt("0x" + string.substring(6,8) + string.substring(4,6)+ string.substring(2,4) + string.substring(0,2); 

解析する長さが不明なデータがたくさんあるので、より良い方法があるかどうか疑問に思っていました。

+0

あなたは "単純" または "より簡単に" 何を呼ぶのでしょうか?私はマイナーチェンジを行うだけですが、それは "私はそれをそのように思っています"ということだけです: 'parseInt(string.substr(6,2)+ string.substr(4,2)+ string.substr 2,232 + string.substr(0,2)、16); ' – Thomas

+0

@Thomasよく私はさまざまな長さの異なる16進数の文字列をたくさん持っています。毎回これはドラッグのようなものです – Jan

答えて

6

あなたはバイトをスワップするために、このようなものを使用することができます。

var endian = "12AB34CD"; 
 

 
var r = parseInt('0x'+endian.match(/../g).reverse().join('')); 
 

 
console.log(r); // Decimal 
 
console.log(r.toString(16).toUpperCase()); // Hex

+0

私はあなたのことを話すことができません名前:-) - 非常に良い - 私はあなたに投票します。 –

0

私はこの自分自身を思い付いたが、受け入れられた答えははるかに短いです。

var hexstring = "12AB34CD"; 
 

 
function littleEndianHexStringToDecimal(string) 
 
{ 
 
    if(!string) return undefined; 
 
    var len = string.length; 
 
    var bigEndianHexString = "0x"; 
 
    for(var i = 0; i < len/2; i++) 
 
    { 
 
     bigEndianHexString += string.substring((len-((i+1)*2)),(len-(i*2))); 
 
    } 
 
    return parseInt(bigEndianHexString); 
 
} 
 

 
console.log(littleEndianHexStringToDecimal(hexstring));

関連する問題