一股劲风,对手正恶狗扑食般向你抢来。此时,你身上的每个毛孔都在探测敌人的功力和动向,而脑中却闪过一个念头:先出左拳,还是右拳?
电脑和人脑一样,也有类似的困惑:大端,还是小端?
这场争端源于数据界的“左右互搏术”——字节序(Byte Order)。
简单来说,字节序就是数据在内存中存储的顺序。
字节序就好比是串糖葫芦,有两种串法:
1.大端序(Big-Endian)
从最大的山楂开始串起,由大到小串。这
种糖葫芦最大的在下面,最小的在上面,与我们的常见的糖葫芦串法正相反。
每颗山楂好比一个字节,而竹签就是内存。
大山楂等价于大字节,称作高位字节;小山楂等价于小字节,称作低位字节。
竹签的底部对应内存的低地址端,尖端对应高地址端。
所以,大端字节序的高位字节存放在内存的低地址端,低位字节存放在内存的高地址端。
2.小端序(Little-Endian)
与大端序(Big-Endian)串法正相反,从最小的山楂开始串起,由小到大串,这样串出来的正是我们平时看到的糖葫芦。
所以,小端字节序的低位字节存放在内存的低地址端,高位字节存放在内存的高地址端。
为啥要搞出两种不同的存储方式呢?仅仅是源于始作俑者们的“任性”。比如,Intel处理器就喜欢小端序,而一些网络协议则偏爱大端序,这就导致了程序员们经常要在“左右护法”之间来回切换,以确保数据能正确传输和解析。
这还真是人为复杂化的典范。
讽刺的是,连糖葫芦都能形成全民统一的串法,而科技含量这么高的计算机却一直在左右互搏。