专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > C语言

怎么判断主机是大端还是小端(字节序)

发布时间:2011-06-28 09:49:12 文章来源:www.iduyao.cn 采编人员:星星草
如何判断主机是大端还是小端(字节序)

转自:http://blog.csdn.net/forestlight/article/details/6933528

  所谓大端就是指高位值在内存中放低位地址,所谓小端是指低位值在内存中放低位地址。比如0x12345678在大端机上是12345678,在小端机上是78564312,而一个主机是大端还是小端要看cpu类型以及运行在上面的操作系统。同一款cpu在不同的操作系统使用的大小端情况是不同的。当然我们通常使用的x86+windows是小端。

        测试大小端一般使用union的特性。union是一个联合体,所有变量公用一块内存,只是在不同的时候解释不同。其在内存中存储是按最长的那个变量所需要的位数来开辟内存的。

       代码如下:     

 1 #include <iostream>
 2 using namespace std;
 3 
 4 union 
 5 {
 6     int number;
 7     char s;
 8 }test;
 9 
10 bool testBigEndin()
11 {
12     test.number=0x01000002;
13     return (test.s==0x01);
14 }
15 
16 void main()
17 {
18     if (testBigEndin())     
19         cout<<"big"<<endl;
20     else 
21         cout<<"small"<<endl;    
22 }

其中union的实际内存长度是int,即一个字,在32位机上是32位。而char是一个byte,只会取第一个低地址字节。所以他的值可以用来判断大小端。

1楼brayden
你确定 char s; 一定放在 union内存开始的第一个byte么?,,这样是不是好一些:,union {,int i;,char c[sizeof(int)];
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: