Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.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 - Fatal编程技术网

Javascript 将字符串解码为整数列表

Javascript 将字符串解码为整数列表,javascript,Javascript,如何在javascript中将长度为4的倍数的字符串解码为32位整数的列表 在python中执行与struct.unpack('>16I,16characterstring)等效的操作。 我可以使用普通的外部库。我正在寻找一些干净的,希望能避免位转移和操纵 例如 "deadbeef" -> (1684365668, 1650812262) "dead" -> [1684365668] "beef" -> [1650812262] 这个库看起来很有前途。它使用HTML5类型的

如何在javascript中将长度为4的倍数的字符串解码为32位整数的列表

在python中执行与struct.unpack('>16I,16characterstring)等效的操作。 我可以使用普通的外部库。我正在寻找一些干净的,希望能避免位转移和操纵

例如

"deadbeef" -> (1684365668, 1650812262)

"dead" -> [1684365668]
"beef" -> [1650812262]

这个库看起来很有前途。

它使用HTML5类型的数组,所以它确实需要一个

用法:

var integers = strToU32("abcdefgh");
console.log(integers[0]); // returns 1684234849
console.log(integers[1]); // returns 1751606885

这里有一个稍微不同的方法-不需要角色类型。使用乘法作为位移位技术。我写了它,所以当str.length不是4的倍数时它仍然有效-但事实上你在你的问题中声明它将是

注意-我没有尝试做“聪明的编码”-所以我确保事情被明确分配,一次一条语句。。。你可能会想出一个更简洁的方法来实现同样的目标。这应该会给你一些启发

function stringToIntArray(str) {
  var l = Math.ceil(str.length/4);  // not needed if you are sure it's a multiple of 4
  var opArray = new Array(l);       // known length - miniscule speed advantage?
  var ii=0, jj=0, charCounter=0;    // ii loops over 4-char word-of-interest
                                    // jj counts elements in the output array
                                    // charCounter points to the current character
  opArray[0]=0;
  while( charCounter < str.length ) {
    ii = charCounter % 4;     // count 0, 1, 2, 3, 0, 1, 2, 3...
    opArray[jj] *= 256;                 // left shift 8 bits
    opArray[jj] += str.charCodeAt(charCounter);  // add next code
    if(ii==3) {
      opArray[++jj]=0; 
      }
    charCounter++;
  }
  return opArray;
}

var myval = stringToIntArray("deadbeef");
alert("'dead' turns into " + myval[0] + "\n'beef' turns into " + myval[1]);

结果如预期;不需要兼容HTML5的浏览器;而且是big endian。

您预期的结果是什么?你能给出一个输入(字符串)和预期输出(字节,可能是十六进制字节)的例子吗?在原始帖子中添加的例子很好。对于我的用例来说很重,但如果我找不到更简单的东西,我会用它。我认为你的转换是小的endian,我想要大的endian。更糟糕的是,我不认为这个操作的endian是在HTML5中定义的
function stringToIntArray(str) {
  var l = Math.ceil(str.length/4);  // not needed if you are sure it's a multiple of 4
  var opArray = new Array(l);       // known length - miniscule speed advantage?
  var ii=0, jj=0, charCounter=0;    // ii loops over 4-char word-of-interest
                                    // jj counts elements in the output array
                                    // charCounter points to the current character
  opArray[0]=0;
  while( charCounter < str.length ) {
    ii = charCounter % 4;     // count 0, 1, 2, 3, 0, 1, 2, 3...
    opArray[jj] *= 256;                 // left shift 8 bits
    opArray[jj] += str.charCodeAt(charCounter);  // add next code
    if(ii==3) {
      opArray[++jj]=0; 
      }
    charCounter++;
  }
  return opArray;
}

var myval = stringToIntArray("deadbeef");
alert("'dead' turns into " + myval[0] + "\n'beef' turns into " + myval[1]);
'dead' turns into 1684365668
'beef' turns into 1650812262