如何在 arraybuffer 中存储 32 位整数?
How to store a 32-bit integer in an arraybuffer?
我好像没听懂Uint32Array
。根据我对 Uint8Array
的了解,我可以在数组(Uint8Array([16])
或 Uint8Array([96,56])
)中输入一个数字,结果就是这样。但是,当我对 Uint32Array([21640])
等更大的数字尝试相同的操作时,它似乎被截断了。 21640 在十六进制中应该等于 5488,但我只得到 88。这实际上是如何工作的?
编辑:阐述
我也在尝试将几个 ArrayBuffers 连接在一起。如果我没记错的话,readAsArrayBuffer
会生成一个 Uint8Array
,我正尝试使用 https://gist.github.com/72lions/4528834
附加一些 32 位数字
关于 Uint8Array
的信息和示例如此之多,而关于 Uint32Array
的信息和示例却很少,这让我觉得这 32 个中的一个会存储一个值,就好像它是 8 个中的 4 个一样。
这是一个在控制台中显示 5488 的工作示例
var bigNumber = new Uint32Array([21640]);
console.log(bigNumber[0].toString(16));
由于您向问题添加了更多内容。如果你想转换
var byte1 = 0x88;
var byte2 = 0x54;
var byte3 = 0;
var byte4 = 0;
var bigValue = (byte4 << 24) | (byte3 << 16) | (byte2 << 8) | (byte1);
console.log(bigValue);
尽管您需要考虑字节顺序
无符号 8 位数字的最大值为 255。根据 os/cpu,较大的数字将被截断或翻转。如果您想将 32 位数字转换为 8 位数组,请尝试这样的操作。
var number = 21640;
var byte1 = 0xff & number;
var byte2 = 0xff & (number >> 8);
var byte3 = 0xff & (number >> 16);
var byte4 = 0xff & (number >> 24);
var arr1 = Uint8Array([byte1,byte2,byte3,byte4]);
根据需要小端还是大端,创建数组时只需颠倒字节顺序即可。
我好像没听懂Uint32Array
。根据我对 Uint8Array
的了解,我可以在数组(Uint8Array([16])
或 Uint8Array([96,56])
)中输入一个数字,结果就是这样。但是,当我对 Uint32Array([21640])
等更大的数字尝试相同的操作时,它似乎被截断了。 21640 在十六进制中应该等于 5488,但我只得到 88。这实际上是如何工作的?
编辑:阐述
我也在尝试将几个 ArrayBuffers 连接在一起。如果我没记错的话,readAsArrayBuffer
会生成一个 Uint8Array
,我正尝试使用 https://gist.github.com/72lions/4528834
关于 Uint8Array
的信息和示例如此之多,而关于 Uint32Array
的信息和示例却很少,这让我觉得这 32 个中的一个会存储一个值,就好像它是 8 个中的 4 个一样。
这是一个在控制台中显示 5488 的工作示例
var bigNumber = new Uint32Array([21640]);
console.log(bigNumber[0].toString(16));
由于您向问题添加了更多内容。如果你想转换
var byte1 = 0x88;
var byte2 = 0x54;
var byte3 = 0;
var byte4 = 0;
var bigValue = (byte4 << 24) | (byte3 << 16) | (byte2 << 8) | (byte1);
console.log(bigValue);
尽管您需要考虑字节顺序
无符号 8 位数字的最大值为 255。根据 os/cpu,较大的数字将被截断或翻转。如果您想将 32 位数字转换为 8 位数组,请尝试这样的操作。
var number = 21640;
var byte1 = 0xff & number;
var byte2 = 0xff & (number >> 8);
var byte3 = 0xff & (number >> 16);
var byte4 = 0xff & (number >> 24);
var arr1 = Uint8Array([byte1,byte2,byte3,byte4]);
根据需要小端还是大端,创建数组时只需颠倒字节顺序即可。