我似乎不太了解Uint32Array
。根据我对Uint8Array
的了解,我可以在数组(Uint8Array([16])
或Uint8Array([96,56])
)中输入一个数字,结果就是这样。但是,当我为更大数量的Uint32Array([21640])
尝试相同的操作时,似乎会截断它。 21640应该等于5488的十六进制数,而我只有88。这实际上如何工作?
修改:详细说明
我还试图将多个ArrayBuffer连接在一起。如果我没记错的话,readAsArrayBuffer
会产生一个Uint8Array
,我正在尝试使用https://gist.github.com/72lions/4528834
Uint8Array
上的信息和示例太多,而Uint32Array
上的信息很少,使我认为这32个值中的一个会存储一个值,好像它是8个值中的4个一样。
答案 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);
尽管您将需要考虑字节顺序