簡體   English   中英

大整數到字節數組JavaScript

[英]Big Integer to Byte Array JavaScript

我制作了一個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輸出? 非常感謝

您不需要圖書館。 只需解析每個字節並將其添加到數組中即可(通過一些操作來模仿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]

嘗試這個:

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) + "]";

您可以使用自定義轉換為負數調整numbers > 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); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM