как преобразовать массив целых чисел в шестнадцатеричную строку и наоборот в JavaScript - PullRequest
3 голосов
/ 06 октября 2011

У меня есть массив 32-битных целых чисел в JavaScript.Как преобразовать его в шестнадцатеричную строку и снова построить тот же 32-битный целочисленный массив из этой шестнадцатеричной строки, когда это необходимо?

hexString = yourNumber.toString (16);может использоваться для преобразования числа в шестнадцатеричное число, но когда массив чисел преобразуется в шестнадцатеричную строку (она будет непрерывной или разделенной каким-либо символом), как мне получить массив чисел из этой строки?

Ответы [ 7 ]

6 голосов
/ 06 октября 2011

Если вы хотите сделать это без запятых

[3546,-24,99999,3322] ==> "00000ddaffffffe80001869f00000cfa"

, то вы можете создать строку, используя 8 шестнадцатеричных цифр для каждого числа.Конечно, вам придется набирать числа с нуля, которые короче 8 шестнадцатеричных цифр.И вам нужно убедиться, что числа закодированы с twos-compment , чтобы правильно обрабатывать любые отрицательные значения.

Вот как это сделать:

var a = [3546,-24,99999,3322];
alert("Original is " + JSON.stringify(a));    // [3546,-24,99999,3322]


// convert to hex string...
//
var b = a.map(function (x) {
    x = x + 0xFFFFFFFF + 1;  // twos complement
    x = x.toString(16); // to hex
    x = ("00000000"+x).substr(-8); // zero-pad to 8-digits
    return x
}).join('');
alert("Hex string " + b);   // 00000ddaffffffe80001869f00000cfa


// convert from hex string back to array of ints
//
c = [];
while( b.length ) {
    var x = b.substr(0,8);
    x = parseInt(x,16);  // hex string to int
    x = (x + 0xFFFFFFFF + 1) & 0xFFFFFFFF;   // twos complement
    c.push(x);
    b = b.substr(8);
}
alert("Converted back: " + JSON.stringify(c));    // [3546,-24,99999,3322]

вот jsFiddle , который показывает приведенный выше пример.

4 голосов
/ 06 октября 2011

Вот, пожалуйста:

var a = [3546,-24,99999,3322];
alert("Original is " + JSON.stringify(a));
var b = (a.map(function (x) {return x.toString(16);})).toString();
alert("Hex string " + b);
var c = b.split(",").map(function (x) {return parseInt(x, 16);});
alert("Converted back: " + JSON.stringify(c));

http://jsfiddle.net/whT2m/

ADDENDUM

ОП спросил об использовании разделителя, отличного от запятой.Нужен только небольшой твик.Вот версия с использованием точки с запятой:

var a = [3546,-24,99999,3322];
alert("Original is " + JSON.stringify(a));
var b = (a.map(function (x) {return x.toString(16);})).join(";");
alert("Hex string " + b);
var c = b.split(";").map(function (x) {return parseInt(x, 16);});
alert("Converted back: " + JSON.stringify(c));

http://jsfiddle.net/DEbUs/

3 голосов
/ 06 октября 2011
var ints = [1,2,30,400];
var hexstr = "";
for(var i=0; i < ints.length; i++) {
    hexstr += ints[i].toString(16) + ";";
}

document.write("Hex: " + hexstr + "<br>");
var intsback = new Array();
var hexarr = hexstr.split(";");
for(var i = 0; i < hexarr.length-1; i++) {
    intsback.push(parseInt(hexarr[i], 16));
}

document.write("Integers back: " + intsback);

http://jsfiddle.net/YVdqY/

1 голос
/ 01 мая 2017

Шестнадцатеричная строка в массив целых чисел (например, 0E0006006200980000000000000000)

dataToNumberArr(data) {
        if(data.length == 2) {
            let val = parseInt(data, 16);
            return [val];
        } else if(data.length > 2) {
            return dataToNumberArr(data.substr(0, 2)).concat(dataToNumberArr(data.substr(2)));
        }
    }
1 голос
/ 06 октября 2011

Вот две функции для преобразования с использованием простого javascript, который должен работать во всех браузерах:

var nums = [3456, 349202, 0, 15, -4567];

function convertNumArrayToHexString(list) {
    var result = [];
    for (var i = 0; i < list.length; i++) {
        result.push(list[i].toString(16));
    }
    return(result.join(","));
}

function convertHexStringToNumArray(str) {
    var result = [];
    var list = str.split(/\s*,\s*/);
    for (var i = 0; i < list.length; i++) {
        result.push(parseInt(list[i], 16));
    }
    return(result);
}


var temp = convertNumArrayToHexString(nums);
temp = convertHexStringToNumArray(temp);

А, рабочая демка: http://jsfiddle.net/jfriend00/3vmNs/

0 голосов
/ 06 октября 2011

Вы можете вызвать parseInt (hexString, 16) для преобразования шестнадцатеричной строки в целочисленное значение.

0 голосов
/ 06 октября 2011

Используйте это:

parseInt(hexstr, 16);

Источник: http://javascript.about.com/library/blh2d.htm

...