Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中将整数数组转换为十六进制字符串,反之亦然_Javascript_Arrays_String_Tostring_Parseint - Fatal编程技术网

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

如何在javascript中将整数数组转换为十六进制字符串,反之亦然,javascript,arrays,string,tostring,parseint,Javascript,Arrays,String,Tostring,Parseint,我有javascript中的32位整数数组。 如何将其转换为十六进制字符串 然后在需要时再次从该十六进制字符串构建相同的32位整数数组 hexString=yourNumber.toString(16); 可用于将数字转换为十六进制 但当数字数组转换成十六进制字符串(它将是连续的或由某些字符分隔)时,如何从该字符串返回数字数组 使用以下命令: parseInt(hexstr, 16); 来源:您可以调用parseInt(hexString,16)将十六进制字符串转换为整数值。var ints=

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

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

使用以下命令:

parseInt(hexstr, 16);
来源:

您可以调用parseInt(hexString,16)将十六进制字符串转换为整数值。

var ints=[1,2,30400];
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);
var hextr=“”; 对于(变量i=0;i”; var intsback=新数组(); var hexarr=hexstr.split(“;”); 对于(变量i=0;i
给你:

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

附录

OP询问使用逗号以外的分隔符。只需要小小的调整。以下是使用分号的版本:

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

这里有两个函数可以使用在所有浏览器中都可以使用的普通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);
var nums=[3456349202,0,15,-4567];
函数convertNumArrayToHexString(列表){
var结果=[];
对于(变量i=0;i

还有,一个工作演示:

如果您想不使用逗号来完成它

[3546,-2499993322]
==>“00000 DDAFFFFFFFE80001869F00000CFA”

然后,您可以为每个数字使用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]

这显示了上面的示例。

十六进制字符串到整数数组(例如,0E000600620098000000000000000)


你想象你的十六进制字符串是什么样子?如果您有数组
[3546,-2499993322]
那么您希望字符串是
dda,-181869F,cfa
还是
00000 DDAFFFFFFFE80001869F00000CFA
?如果它采用第二种形式,那么如何返回32位整数的数组?我希望输出中的字符数最少,因此首先最好将逗号分离出来,然后将其转换为32位整数?第二种形式的FYI每8位代表32位整数,不需要分隔符。第一种情况也很好。如何将十六进制字符串转换为32位整数数组呢!但是如果不使用逗号,那么必须做什么?在原始数组中的所有元素都是数字的前提下,逗号是安全的。通过使用JavaScript的
Array#toString
方法可以免费获得逗号。是否要将非逗号用作分隔符?如果是这样,您可以将我使用的
toString
替换为使用
join
的表达式。如果您想查看带有自定义分隔符的答案,请告诉我。(我知道jfriend00发布了一个带有分号的答案;但如果您对函数式方法感兴趣,我很乐意添加到我的答案中。jfriend00更快。)@vaichidrewar添加了一个使用分号的版本,以供参考。只要不是十六进制数字或连字符(用于减号),几乎任何字符都可以使用。@Ray您在问题1的注释中提到了两种方法)带分隔符2)不带分隔符。如果不使用分隔符,那么需要什么?在我对您的问题的最初评论中,我问您是否希望利用32位数字以8位十六进制数字表示的事实,以便将它们组合在一起。不需要分隔符,因为所有值都正好占用8个十六进制数字。要转换回原来的值,一次读取8个十六进制数字。这个机制需要你做更多的工作,当数字很小的时候会占用更多的空间。很高兴看到很多替代品。
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)));
        }
    }