Разбор строки с прямым порядком байтов в десятичную

1

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

У меня много данных с неизвестной длиной для синтаксического анализа, поэтому мне было интересно, есть ли лучший способ.

Теги:
hex
endianness

2 ответа

8
Лучший ответ

Вы можете использовать что-то вроде этого, чтобы поменять байты:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню