javascript - 在 JavaScript 中将字节解释为打包的二进制数据

标签 javascript arrays endianness

我有一个字节数组:

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

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

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

有没有办法在 JavaScript 中实现这个而不需要导入?

最佳答案

在 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]

关于javascript - 在 JavaScript 中将字节解释为打包的二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29638016/

相关文章:

javascript - 我将如何编写 JavaScript 来解释多个单选按钮和变量输出,具体取决于选择的单选按钮?

javascript - 与函数相比,为什么提升在变量中的工作方式不同?

php - 如何将数组内爆到新行

x86 - CPU 寄存器内的字节顺序

c - 反转从二进制文件读取的指针

Javascript,动态表将选项框插入表中

javascript - 正则表达式匹配不输出相邻匹配javascript

javascript - 背景颜色没有改变

php - 如何将元素数组从 iOS 发送到 PHP Web 服务

java - Java 中的 Little 和 Big Endian (android)