linux大小端
1、大小端的原理
字节序:又称尾序、端序
大端(big endian):将数据的低位字节存放在内存的高位地址,高位字节存放在低位地址。简称高低
小端(little endian):将数据的低位放在较小的地址处,高位放在较大的地址处。简称高高
笔者假设存储数据为0x89ABCDEF 32位数据
大端存储:
| 低地址 | 高地址 | ||||
| ....... | 0x89 | 0xAB |
0xCD |
0xEF | ...... |
小端存储:
| 低地址 | 高地址 | ||||
| ....... | 0xEF | 0xCD |
0xAB |
0x89 | ...... |
2、大小端存储优劣以及原因
| 优点 | ||
| 大端 | 适合人类书写、阅读 | |
| 小端 | 适合计算机阅读,CPU读取内存中的数据时,是从低地址向高地址方向进行读取的。即地址访问时由低到高 |
3、大小端历史来源
关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可以那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他的父亲,就下令,命令所有的子民吃鸡蛋的时候,必须先打破鸡蛋较小的一端,违令者重罚。然后老百姓对此法令极为反感,期间发生了多次叛乱,其中一个皇帝因此送命,另一个丢了王位,产生叛乱的原因就是另一个国家Blefuscu的国王大臣煽动起来的,叛乱平息后,就逃到这个帝国避难。据估计,先后几次有11000余人情愿死也不肯去打破鸡蛋较小的端吃鸡蛋。这个其实讽刺当时英国和法国之间持续的冲突。Danny Cohen一位网络协议的开创者,第一次使用这两个术语指代字节顺序,后来就被大家广泛接受。
4、如何测试设备大小端
lscpu | grep -i byte
Little Endian 则为小端,Big Endian为大端
echo -n I | od -o | head -n1 | cut -f2 -d" " | cut -c6 输出:1为小端模式,0为大端模式;
echo -n I | od -o | head -n1 | awk '{print $2}'| cut -c6 输出:1为小端模式,0为大端模式;
5、参考:
https://zhuanlan.zhihu.com/p/352145413
https://blog.csdn.net/loveprogram_1/article/details/30464761
https://www.zhihu.com/question/25311159
https://blog.csdn.net/nicai_xiaoqinxi/article/details/85311458
浙公网安备 33010602011771号