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
}
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,...]