vaichidrewar
vaichidrewar

Reputation: 9621

how to convert array of integers into hex string and vice versa in javascript

I have array of 32 bit integers in javascript. How to convert it into the Hex string and again build the same 32 bit integer array from that Hex string when required?

hexString = yourNumber.toString(16); can be used to convert number to hex but when array of numbers is converted into Hex string (it will be continuous or separated by some character) then how do I get back array of numbers from that string?

Upvotes: 4

Views: 13090

Answers (8)

mirik
mirik

Reputation: 457

let ints = [1,2,30,400];
let hex = parseInt(ints.reverse().map(n => n.toString(16)).join(''), 16)

If you want to use large numbers (>255) like "400" you have to add padding to every array member

Upvotes: 0

Soohwan Park
Soohwan Park

Reputation: 635

Hex string to integer array(ex, 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)));
        }
    }

Upvotes: 1

Lee
Lee

Reputation: 13542

If you want to do it without commas

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

then you can build up the string using 8 hex-digits for each number. Of course, you'll have to zero-pad numbers that are shorter than 8 hex-digits. And you'll have to ensure that the numbers are encoded with twos-compliment to properly handle any negative values.

Here's how to do that:

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]

here's a jsFiddle that shows the above example.

Upvotes: 9

Ray Toal
Ray Toal

Reputation: 88378

Here you go:

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

The OP asked about using a separator other than a comma. Only a small tweak is needed. Here is a version using the semicolon:

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/

Upvotes: 4

jfriend00
jfriend00

Reputation: 707466

Here are two functions to do the conversions using plain javascript that should work in all browsers:

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

And, a working demo: http://jsfiddle.net/jfriend00/3vmNs/

Upvotes: 1

Artem Koshelev
Artem Koshelev

Reputation: 10606

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/

Upvotes: 3

ControlPower
ControlPower

Reputation: 610

You can call parseInt(hexString, 16) to convert a hex string to an integer value.

Upvotes: 0

Sunjay Varma
Sunjay Varma

Reputation: 5115

Use this:

parseInt(hexstr, 16);

Source: http://javascript.about.com/library/blh2d.htm

Upvotes: 0

Related Questions