【笔试题】如何判断主机是大端还是小端(字节序)

转自:http://blog.csdn.net/forestLight/article/details/6933528#comments

 

     今天看《linux程序设计》中关于跨平台需要注意的事项,看到了大端小端的问题。突然想起实验室一同学的笔试题,如何判断主机的大端还是小端。

     所谓大端就是指高位值在内存中放低位地址,所谓小端是指低位值在内存中放低位地址。比如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 }

 

posted on 2013-06-22 12:02  Paul_bai  阅读(611)  评论(0编辑  收藏  举报

导航