如何在javascript中解压缩二进制文件?

时间:2016-06-18 00:17:30

标签: javascript python-2.7

我正在尝试将一些现有代码从python移植到javascript,并且我不确定如何进行以下操作。

var1, var2 = struct.unpack('<II', buf[:8])

它应该从缓冲区获得两个整数。缓冲区以二进制开始,但此时它已被转换为字节(即。bytes(buf))。

示例缓冲区:

<Buffer 35 8a 0a 24 16 ed ea 42 88 28 b1 20 b1 cf c9 a1 c9 cc 5c 0b 18 b0 70 3a 8c b8 83 ee d6 ca 55 bf f9 75 1c 94 46 8c 17 03 01 00 20 5a 17 be 43 ba 08 a6 ... >

1 个答案:

答案 0 :(得分:1)

如果您的缓冲区是node.js Buffer

var buf = new Buffer([0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00]);

console.log(buf.readUInt32LE(0), buf.readUInt32LE(4));

如果您的缓冲区是typed arrays

let buf = new Uint8Array([0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00]);
    uint32 = new Uint32Array(buf.buffer);

console.log(uint32[0], uint32[1]); // 255 and 65535 on little endian architectures

如果您的缓冲区是标准数组:

let buf = [0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF];

let var1 = buf[0] * 0x1000000 + (buf[1] << 16) + (buf[2] << 8) + buf[3],
    var2 = buf[4] * 0x1000000 + (buf[5] << 16) + (buf[6] << 8) + buf[7];

console.log(var1, var2); // 255 and 65535 on all architectures

您可能也对destructuring assignment感兴趣(自ES6起):

let var1, var2;
[var1, var2] = [1, 2];