У меня есть маленькая конечная шестнадцатеричная строка, которую нужно преобразовать в десятичный код в JavaScript.
Пример hex string: "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));