如何在数组缓冲区中存储 32 位整数?



我似乎不明白Uint32Array。根据我读到的关于Uint8Array我可以在数组(Uint8Array([16])Uint8Array([96,56])(中给它一个数字,结果正是这样。但是,当我对像Uint32Array([21640])这样的较大数字尝试同样的事情时,它似乎截断了它。其中 21640 应该等于十六进制中的 5488,我只得到 88。这实际上是如何工作的?

编辑:详细说明

我还尝试将几个 ArrayBuffer 连接在一起。如果我没记错的话readAsArrayBuffer会产生一个Uint8Array,并且我正在尝试使用 https://gist.github.com/72lions/4528834 将一些 32 位数字附加到该数字

关于Uint8Array的信息和例子太多了,Uint32Array上的信息和例子很少,这让我认为这 32 个中的一个会存储一个值,就好像它是 8 个中的 4 个一样。

无符号 8 位数字的最大值为 255。较大的数字将被截断或滚动,具体取决于操作系统/CPU。如果要转换 8 位数组中的 32 位数字,请尝试这样操作。

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]);

只需在创建数组时颠倒字节顺序,具体取决于您是想要小端还是大端。

这是一个在控制台中显示 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);

虽然您需要考虑字节序

最新更新