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

时间:2019-10-08 13:44:39

标签: javascript uint8array

我似乎不太了解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个一样。

2 个答案:

答案 0 :(得分:1)

一个无符号的8位数字的最大值是255。较大的数字将被截断或翻转,具体取决于os / 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]);

在创建数组时,只需反转字节的顺序即可,具体取决于您需要的是小端字节序还是大端字节序。

答案 1 :(得分:0)

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

尽管您将需要考虑字节顺序