【问题标题】:Parsing a little endian hex string to decimal将小端十六进制字符串解析为十进制
【发布时间】:2017-05-31 14:41:46
【问题描述】:

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

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

【问题讨论】:

  • 您认为“更简单”还是“更容易”?我只会做一个小的改变,但这只是“我更喜欢那样”的事情:parseInt(string.substr(6,2) + string.substr(4,2) + string.substr(2,2) + string.substr(0,2), 16);
  • @Thomas 我有很多不同长度的十六进制字符串,每次都这样做有点拖累

标签: javascript hex endianness


【解决方案1】:

你可以使用这样的东西来交换字节:

var endian = "12AB34CD";

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】: