在JavaScript中将字节解释为压缩二进制数据

时间:2015-04-14 21:50:24

标签: javascript bytearray endianness

我有一个字节数组:

[101, 97, 115, 121] # ['e', 'a', 's', 'y']

如何将其解释为压缩二进制文件?类似于Python中的struct.Struct(format).unpack

>>> import struct
>>> s = struct.Struct('>1I') # a big-endian, two-byte, unsigned int
>>> s.unpack('easy')
(1700885369,)

有没有办法在没有导入的情况下在JavaScript中实现它?

1 个答案:

答案 0 :(得分:3)

在JavaScript中没有内置方法可以做到这一点。但是,Python的struct模块有各种端口可用于精确复制功能,例如: jspack

如果你只想做一个(或几个)操作,你可以自己轻松实现它:

var bytes = [101, 97, 115, 121];
var unpacked = bytes.reduce(function (s, e, i) { return s | e << ((3 - i) * 8); }, 0);
console.log(unpacked); // 1700885369

这实际上是一种奇特的方式:

121 | 115 << 8 | 97 << 16 | 101 << 24

或使用索引编写:

bytes[3] | bytes[2] << ((3-2) * 8) | bytes[1] << ((3-1) * 8) | bytes[0] << ((3-0) * 8)

反过来说:

var number = 1700885369;
var bytes = [];
while (number > 0) {
    bytes.unshift(number & 255);
    number >>= 8;
}
console.log(bytes); // [101, 97, 115, 121]
相关问题