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

posted on 2022-05-24 07:55  红旗kernel  阅读(1268)  评论(0)    收藏  举报

导航