我有一个数组,该数组是 32位,Big Endian Unsigned Integers ,基本上是纯文本,就像此[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
32bit endian数组本身在二进制基础64 AAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEA==
最初,如果我从天堂收到此内容,现在如何解码/将所有内容解放到JavaScript中可以理解的纯文本表示。
中在Ruby中,我可以简单地使用Base64.decode
和String#Unpack
encoded_string = 'AAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEA=='
decoded_string = Base64.strict_decode64(encoded_string)
=> "x00x00x00x01x00x00x00x02x00x00x00x03x00x00x00x04x00x00x00x05x00x00x00x06x00x00x00ax00x00x00bx00x00x00tx00x00x00nx00x00x00vx00x00x00fx00x00x00rx00x00x00x0Ex00x00x00x0Fx00x00x00x10"
decoded_string.unpack('N*') #32-bit unsigned, network (big-endian) byte order
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
在JavaScript中是否有相当于这个简单的步骤?
您可以通过使用ArrayBuffer
和DataView
function getInt(string) {
var view = new DataView(new ArrayBuffer(4)),
i;
for (i = 0; i < string.length; i++) {
view.setUint8(i, string.charCodeAt(i));
}
return view.getInt32(0);
}
var encodedData = 'AAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEA==',
decodedData = window.atob(encodedData),
result = [],
i = 0;
while (i < decodedData.length) {
result.push(getInt(decodedData.slice(i, i += 4)));
}
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
好的,在进行严格的搜索后,我发现了这个特定于此目的的库-https://www.npmjs.com/package/package/binary
还提供其他编码
encoded_string = 'AAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEA=='
let buffer = new Buffer(encoded_string, 'base64');
let arrayList = [];
let binaryList = binary.parse(buffer);
for (var i = 0; i <(buffer.length / 4); i++) {
arrayList.push(binaryList.word32bu('a').vars.a);
};
first window.atob('aaaaaqa')=&gt;' x00 x00 x00 x01 x02 x03' */
const encoder = new TextEncoder()
const view = encoder.encode('x00x00x00x01x02x03')
console.log(view);
/* Uint8Array(6) [0, 0, 0, 1, 2, 3] */
这应该是正确的方式!!