博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
大端序与小端序
阅读量:5142 次
发布时间:2019-06-13

本文共 1439 字,大约阅读时间需要 4 分钟。

端序(Endianness),又称字节序、尾序、位序。在计算机领域是指机器存放多字节数据的字节顺序。在涉及到低层数据存储和网络数据传输研究中都会涉及端序。

大端序(Big-Endian,大尾序):高位字节放在内存的低地址,低位字节放在内存的高地址。

小端序(Little-Endian,小尾序):低位字节放在内存的低地址,高位字节放在内存的高地址。

端序是与硬件的体系结构相关而与所使用的操作系统无关的概念,目前基本上所有x86系列的PC机都是小端序。

 

在32位机器上,对于数0x12345678来说,低层表示的方法因端序而排列不同

小端序:                            |    0x78    |    0x56    |    0x34    |    0x12    |

                    低地址         --0----------7-8-------15-16------23-24-------31-->        高地址

 

大端序:                            |    0x12    |    0x34    |    0x56    |    0x78    |

                    低地址         --0----------7-8-------15-16------23-24-------31-->        高地址

 

判定方法

方法一:将整形int强制转换char测试

1 bool isBigEndian()2 {3     int a = 1;4         if (((char*)&a)[sizeof(int) - 1] == 1) {5         return true;6     } else {7         return false;8     }9 }

对于32位机器来说:

小端序:                            |    0x01    |    0x00    |    0x00    |    0x00    |

                    低地址         --0---[0]---7-8--[1]--15-16-[2]-23-24--[3]--31-->        高地址

 

大端序:                            |    0x00    |    0x00    |    0x00    |    0x01    |

                    低地址         --0---[0]---7-8--[1]--15-16-[2]-23-24--[3]--31-->        高地址

 

方法二:使用union,其所有成员共享同一个最大的内存地址。

1 bool isBigEndian() 2 { 3     union c 4     { 5         int a; 6         char b; 7     }; 8     c.a = 1; 9 10     if (c.b == 1) {11         return true;12     } else {13         return false;14     }15 }

在编程时使用移位操作,我们未感受到端序对代码的影响,是因为操作系统和编译器低层实现时屏蔽了这些细节,为编程人员提供了逻辑上的一致性操作,但是其实际物理上的操作会根据端序不同做出不同的处理方式。

历史上很多人对端序优劣的争执很情绪化,个人认为没有必要,并且也没有任何论证能证明两者之间的优劣。

相关故事:“端序”(endian)词语起源于《格利佛游记》。书中有一个故事:有一个国家发生了政变,分裂为两个国家,并且连年征战。而整个事件的起因是一派人赞成吃鸡蛋的时候应该先打破小的一端来吃,而另一派则主张应该打破大的一端来吃。双方还纷纷著书立说来阐述各自的道理。这是一个讥讽意味的故事,告诫大家不要做这种没有意义的争执。

 

参考博文:

转载于:https://www.cnblogs.com/yooyoo/p/4717709.html

你可能感兴趣的文章
C++有关 const & 内敛 & 友元&静态成员那些事
查看>>
函数积累
查看>>
python搜索引擎(转)
查看>>
iphone应用程序生命周期浅析
查看>>
Git 中 SSH key 生成步骤
查看>>
关于height,line-height导致的样式混乱的问题
查看>>
《SEO实战密码》读后一点感受
查看>>
bzoj 4815 [Cqoi2017]小Q的表格——反演+分块
查看>>
Swift 入门之简单语法(六)
查看>>
jquery validate name相同通过id验证
查看>>
CentOS下安装MySQL
查看>>
iOS 沙盒目录结构介绍
查看>>
os.popen()
查看>>
RedHat7搭建yum源服务器
查看>>
react propTypes验证规则
查看>>
jquery.validate使用【转】
查看>>
Tour HDU - 3488
查看>>
java反射详解zz
查看>>
mysql 导出表结构和表数据 mysqldump用法
查看>>
Ubuntu下忘记MySQL密码重设方法
查看>>