织梦CMS - 轻松建站从此开始!

罗索

大端序和小端序的差别

jackyhwei 发布于 2011-09-16 20:11 点击:次 
大小端序跟硬件的体系结构有关,所有x86系列的pc机都是小端序,跟操作系统无关(网上都这么说,可是无法验证,但在x86系列的pc上的solaris系统是小端序,sun sparc平台的solaris是大端序,这个本人验证过)
TAG:

环境:
bash-2.05$ uname -a
SunOS test 5.9 Generic_112233-12 sun4u sparc SUNW,Ultra-80
输出结果:
10101011
big endian order

环境:
test@develop:~$ uname -a
Linux develop 2.6.35-24-generic #42-Ubuntu SMP Thu Dec 2 02:41:37 UTC 2010 x86_64 GNU/Linux
输出结果:
11010101
little endian orde

具体代码如下:

  1. #include <iostream> 
  2. using namespace std; 
  3.  
  4. typedef struct 
  5.     unsigned char a1: 1; 
  6.     unsigned char a2: 1; 
  7.     unsigned char a3: 1; 
  8.     unsigned char a4: 1; 
  9.     unsigned char a5: 1; 
  10.     unsigned char a6: 1; 
  11.     unsigned char a7: 1; 
  12.     unsigned char a8: 1; 
  13. }Data; 
  14.  
  15. int main(int argc, char** argv) 
  16.     unsigned char a = 0xab;//10101011 
  17.     Data *test = (Data*)&a; 
  18.     cout<<(unsigned int)test->a1<<(unsigned int)test->a2; 
  19.     cout<<(unsigned int)test->a3<<(unsigned int)test->a4; 
  20.     cout<<(unsigned int)test->a5<<(unsigned int)test->a6; 
  21.     cout<<(unsigned int)test->a7<<(unsigned int)test->a8<<endl; 
  22.  
  23.     unsigned short data=0X8284; 
  24.     unsigned char *p = (unsigned char*)&data; 
  25.  
  26.     if(*p == 0X82) 
  27.     { 
  28.         cout<<"big endian order"<<endl; 
  29.     } 
  30.     else if(*p == 0x84) 
  31.     { 
  32.         cout<<"little endian order"<<endl; 
  33.     } 
  34.     return 0; 

结论:
大端序:低地址存放高位,不管是在字节之间还是字节内部,内存中存放数据的位置跟我们头脑中以及教科书上的顺序是一致的,比如数字0X1234,在内存中存放的序列是:0001 0010 0011 0100
小端序:地地址存放低位,顺序刚好跟大端序相反,比如数字0X1234,在内存中存放的序列是:0010 1100 0100 1000

大小端序跟硬件的体系结构有关,所有x86系列的pc机都是小端序,跟操作系统无关(网上都这么说,可是无法验证,但在x86系列的pc上的solaris系统是小端序,sun sparc平台的solaris是大端序,这个本人验证过)

补充:
我们经常用移位操作,但从来没感受到大小端序对我们程序代码的影响,个人认为是操作系统或者编译器底层实现移位操作的时候屏蔽掉了这些细节,也就是说大端序和小端序平台的移位操作在实现上应该是不一样的,但给我们使用者的感受是一样的

(public0821)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201109/15008.html]
本文出处:public0821.iteye.com 作者:public0821
顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容