[javascript]端序(endian)和Buffer对象的read|write系列函数
假设有如下对象:
var buf = Buffer.from("Hello.\n");
其保存在内存当中的形式实际上是这样的,这里我们假设该对象的内存地址从0x00开始:
地址 | 0x00 | 0x01 | 0x02 | 0x03 | 0x04 | 0x05 | 0x06 |
值 | 48 | 65 | 6c | 6c | 6f | 2e | 0a |
编码对应 | H | e | l | l | o | . | LF |
当我们调用方法buf.readInt32BE(3)对其进行输出时,其意义相当于“从buffer第三个地址开始,往后4个字节当成是一个长度为32的大端序整型输出”,那么由于大端序把低位一边保存大数的特点,它的输出就是:
0x6c6f2e0a,可以看到cp[0]是6c;
当我们调用方法buf.readInt32LE(3)对其进行输出时,其意义相当于“从buffer第三个地址开始,往后4个字节当成是一个长度为32的小端序整型输出”,那么由于小端序把低位一边保存小数的特点,它的输出就是:
0x0a2e6f6c,可以看到cp[0]是0a;
可以到,大端序是更符合人类对数字的阅读视角的;