将小端十六进制字符串解析为十进制

Parsing a little endian hex string to decimal

我有一个小端十六进制字符串,需要在 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);

我有很多长度未知的数据需要解析,所以我想知道是否有更好的方法。

您可以使用类似这样的方式来交换字节:

var endian = "12AB34CD";

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

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

这是我自己想出来的,但接受的答案要短得多。

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));