将 32 位整数的非类型化数组转换为 UInt8Array 的最有效方法?

Most efficent way to convert a non-typed array of 32-bit integers to a UInt8Array?

我需要使用一个标准的 javascript 数组,其中填充了有效的 32 位带符号整数,并将其转换为 UInt8Array。例如,考虑以下标准 javascript 数组:

[255, 3498766, -99]

我希望生成的 UInt8Array 包含这些数字的带符号 32 位表示形式:

255     = [0x00, 0x00, 0x00, 0xFF]
3498766 = [0x00, 0x35, 0x63, 0x0E]
-99     = [0xFF, 0xFF, 0xFF, 0x9D]

因此,给定输入 [255, 3498766, -99],结果将是:

[0x00, 0x00, 0x00, 0xFF, 0x00, 0x35, 0x63, 0x0E, 0xFF, 0xFF, 0xFF, 0x9D]

我可以想出简单的方法来完成此操作,但我正在寻找尽可能直接的转换。

a = [255, 3498766, -99]
b = new Uint8Array(Int32Array.from(a).buffer)
console.log(b)

结果将按平台字节顺序排列,即当今大多数处理器上的 LE。如果您真的像您的示例中那样想要大端,则需要对 DataView.getInt32 进行一些额外的调整(有关详细信息,请参阅 here)。