字节序的介绍文章网上非常多,这里不再赘述,可以参考MDN上的介绍。
在做底层网络编程的时候会遇到字节序转换的情况,因为我们现在接触的机器一般都是little-endian(小端序)
而网络传输一般使用big-endian(大端序)
。
那么,站在前端的角度如何通过示例来验证小端序
呢?且看代码:
const buffer = new ArrayBuffer(2) // 申请2字节缓冲区
const u16View = new Uint16Array(buffer) // 使用16位无符号视图,以双字节为单位读写buffer
u16View[0] = 300
const u8View = new Uint8Array(buffer) // 使用8位无符号视图,以单字节读写buffer
console.log(u8View) // 得到[44, 1]
[44, 1]
对应的二进制位 [00101100, 00000001]
由于内存是连续的,我们如果按大端序解析这两个字节,得到的结果应该是:
parseInt("0010110000000001", 2) // 11265
并不是我们开始写入的300
,而反过来:
parseInt("0000000100101100", 2) // 300
得到了我们想要的结果。