JS字节序相关
字节序分2种
- Little endian:小端字节序, 将低序字节存储在起始地址
- Big endian:大端字节序, 将高序字节存储在起始地址
JS里面的体现: 同一段数据用不同视图读取
1 | const uint8 = new Uint8Array([1, 2]); |
上面代码生成一个 2 个长度的Uint8 TypedArray,然后在它的buffer基础上,建立了一个 16 位整数的视图。
那么这段数据对应的二进制应该是 00000001 00000010
1 | 0b0000000100000010 |
用16位无符号整数读出来应该是 0b0000000100000010
, 应该是258, 为什么是 513呢 ?
解释:
这说明本电脑采用的小端字节序(little endian),相对重要的字节排在后面的内存地址,相对不重要字节排在前面的内存地址, 即 00000010 00000001
1 | 0b0000001000000001 |
那么如果想手动指定字节序呢 ?
DataView 视图:
- 支持多种类型读写
- 支持设置字节序
DataView视图提供更多操作选项,而且支持设定字节序。
默认情况下,DataView的get方法使用大端字节序解读数据,如果需要使用小端字节序解读,必须在get方法的第二个参数指定true。
1 | const dv = new DataView(uint8.buffer); |
写入数据同理。