JavaScript类型化数组发生了看不懂的结果!请求哪位大神帮忙解答一下下!谢谢你啦!

这个Uint32就是用的32进制存的吗?Uint16就是用的16进制存的吗?

第一种先使用Uint32Array再使用Uint16Array操作同一个数组,输出的结果为什么是1 0 2 0 3 0 4 0 ?

var buffer = new ArrayBuffer(16);
var array = new Uint32Array(buffer);
for(var i = 0; i < array.length;++i){
    array[i] = i+1;
    document.write(array[i]+"  "); //1 2 3 4 
}

document.write("<br>");

var array2 = new Uint16Array(buffer);
for(var i = 0; i < array2.length;++i){
    document.write(array2[i]+"  "); //1 0 2 0 3 0 4 0 
}

第二种先使用Uint16Array再使用Uint32Array操作同一个数组,输出的结果为什么是131073 262147 393221 524295 ?

var buffer = new ArrayBuffer(16);
var array = new Uint16Array(buffer);
for(var i = 0; i < array.length;++i){
    array[i] = i+1;
    document.write(array[i]+"  "); //1 2 3 4 5 6 7 8 
}

document.write("<br>");

var array2 = new Uint32Array(buffer);
for(var i = 0; i < array2.length;++i){
    document.write(array2[i]+"  "); //131073 262147 393221 524295 
}

大神请你将详细点!可以吗?哈哈

这个Uint32就是用的32进制存的吗?Uint16就是用的16进制存的吗?

计算机内部都是二进制存的(虽然可以用10或者16进制显示给你看)
Uint32使用32个二进制位(bit)存储,U表示没有符号。所以可以表示的范围是00000...0~1111...1(32个0到32个1),对应的10进制是0~4294967295
Uint16使用16个二进制位表示,所以是0~65535
因为8bit=1byte(字节),所以也可以说分别是4个字节和2个字节。

Uint16Array:16位无符号整数,长度2个字节
Uint32Array:32位无符号整数,长度4个字节

纯手打 有点长 耐心点看 顺带给点分咱下东西吧QAQ

不是进制 是位

Uint16Array 是无符号16位整数

Uint32Array 是无符号32位整数

下面看不懂可以去百度二进制还有**字节序(大小端)**的问题

因为buffer是一样的

分情况说 第一种 uint32里面[1,2,3,4] js默认是**低字节排序** 所以现在buffer里面的情况是:

0x01,0x00,0x00,0x00, 0x02,0x00,0x00,0x00, 0x03,0x00,0x00,0x00, 0x04,0x00,0x00,0x00

那uint16按16位分割buffer就会出现:

0x01,0x00, 0x00,0x00, 0x02,0x00, 0x00,0x00, 0x03,0x00, 0x00,0x00, 0x04,0x00, 0x00,0x00

也就是[1,0,2,0,3,0,4,0]的原因了

第二种情况:
uint16=[1,2,3,4,5,6,7,8] 那buffer里面:

0x01,0x00, 0x02,0x00, 0x03,0x00, 0x04,0x00, 0x05,0x00, 0x06,0x00, 0x07,0x00, 0x08,0x00

uint32按32位分割:

0x01,0x00,0x02,0x00, 0x03,0x00,0x04,0x00, 0x05,0x00,0x06,0x00, 0x07,0x00,0x08,0x00

因为是**低字节排序** 所以会出现[131073,262147,393221,524295] ps:[0x00 02 00 01, 0x00 03 00 04,...]