base64二进制解码32位数组



我有一个数组,该数组是 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.decodeString#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中是否有相当于这个简单的步骤?

您可以通过使用ArrayBufferDataView

来解码给定的字符串,并取下四个字符以将四个字符转换为32位数字

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] */

这应该是正确的方式!!

最新更新