2017-05-31 120 views
0

我有一個小端的十六進制字符串,需要在JavaScript中轉換爲十進制。解析一個小端的十六進制字符串爲十進制

十六進制字符串示例:「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,2)+ string.substr(0,2),16);' – Thomas

+0

@Thomas我有很多不同長度的不同的十六進制字符串,每次做這個都有點拖累 – 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));

相關問題