【问题标题】:Big Integer to Byte Array JavaScript大整数到字节数组 JavaScript
【发布时间】:2017-05-29 07:28:02
【问题描述】:

我制作了一个 Java 程序,它使用 Java 的 BigInteger 类为我提供所需的输出。

String key = "253D3FB468A0E24677C28A624BE0F939";
byte[] array = new BigInteger(key, 16).toByteArray();
System.out.println(Arrays.toString(array));

输出如下:

[37、61、63、-76、104、-96、-30、70、119、-62、-118、98、75、-32、-7、57]

尝试使用 JavaScript 做同样的事情。使用了 Big Int 库:https://github.com/peterolson/BigInteger.js 因为十六进制值太长。

var q = new bigInt("253D3FB468A0E24677C28A624BE0F939", 16); 
console.log(q.toString());

var out = q.toString();
var bytes = []; 

for (var i = 0; i < out.length; ++i) {
var code = out.charCodeAt(i);
bytes = bytes.concat([code]);
}
 console.log(bytes);

字节 = [52, 57, 52, 57, 57, 52, 53, 56, 48, 51, 55, 54, 54, 55, 55, 51, 50, 49, 49, 50, 56, 56, 51、55、53、48、53、50、54、55、57、52、49、51、53、56、54、53]

如何使用 JavaScript 获得相同的 Java 输出?非常感谢

【问题讨论】:

    标签: javascript java arrays hex byte


    【解决方案1】:

    你不需要图书馆。只需解析出每个字节并将其添加到数组中(通过一些操作来模仿 Java 的带符号字节):

    var q = '253D3FB468A0E24677C28A624BE0F939';
    var bytes = [];
    for (var i = 0; i < q.length; i += 2) {
        var byte = parseInt(q.substring(i, i + 2), 16);
        if (byte > 127) {
            byte = -(~byte & 0xFF) - 1;
        }
        bytes.push(byte);
    }
    console.log(bytes);
    // [37, 61, 63, -76, 104, -96, -30, 70, 119, -62, -118, 98, 75, -32, -7, 57]
    

    【讨论】:

      【解决方案2】:

      试试这个:

      var input = "253D3FB468A0E24677C28A624BE0F939";
      var output = "";
      for (var i = 0; i < input.length; i += 2) {
        var value = parseInt(input.substr(i, 2), 16);
        output += ", " + (value < 128 ? value : value - 256);
      }
      output = "[" + output.substr(2) + "]";
      

      【讨论】:

        【解决方案3】:

        您可以使用自定义转换,将 numbers &gt; 127 调整为负数。

        var key = "253D3FB468A0E24677C28A624BE0F939",
            bytes = key.match(/../g).map(function (a) {
                var i = parseInt(a, 16)
                return i >> 7 ? i - (1 << 8) : i;
            });
        
        console.log(bytes);

        【讨论】:

          猜你喜欢
          • 2018-03-08
          • 2012-07-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-27
          • 2017-08-20
          相关资源
          最近更新 更多