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