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

2024-05-27

我正在尝试将一些现有代码从 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 ... >

如果你的缓冲区是一个node.jsBuffer:

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

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

如果你的缓冲区是类型数组 https://developer.mozilla.org/en/docs/Web/JavaScript/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

你也可能对此有兴趣解构赋值 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment(自 ES6 起):

let var1, var2;
[var1, var2] = [1, 2];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在javascript中解压二进制文件? 的相关文章

随机推荐