如何在javascript中将整数数组转换为十六进制字符串,反之亦然

vai*_*war 3 javascript arrays string tostring parseint

我在javascript中有32位整数数组.如何将其转换为十六进制字符串,并在需要时再次从该十六进制字符串构建相同的32位整数数组?

hexString = yourNumber.toString(16); 可用于将数字转换为十六进制,但是当数字数组转换为十六进制字符串(它将是连续的或由某个字符分隔)时,如何从该字符串中返回数字数组?

Lee*_*Lee 6

如果你想没有逗号的话

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

然后你可以为每个数字使用8个十六进制数字来构建字符串.当然,您必须填充短于8个十六进制数字的数字.而且你必须确保数字是用两个恭维编码的,以正确处理任何负值.

以下是如何做到这一点:

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]
Run Code Online (Sandbox Code Playgroud)

这是一个显示上面例子的jsFiddle.