将 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)。
我需要使用一个标准的 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)。