tag 标签: 大端模式

相关博文
  • 热度 9
    2013-11-7 13:13
    1324 次阅读|
    0 个评论
    以下程序是在同一台式机上vc6测试: ----------------------------------------- //输出不同类型所占内存空间长度 #include "stdio.h" int main() {  printf("char length:%d\n",sizeof(char));  printf("short length:%d\n",sizeof(short));  printf("int length:%d\n",sizeof(int));   printf("long length:%d\n",sizeof(long));  return 1; } //char length:1 //short length:2 //int length:4 //long length:4 //Press any key to continue ----------------------------------------- //判断芯片的大端小端 #include "stdio.h" int main() {  union w  {   int a; //4 bytes   char b;//1 byte  }c;  c.a=1;  if (c.b==1)  {   printf("It is Little_endian!\n");  }  else  {   printf("It is Big_endian!\n");  }  return 1; } //It is Little_endian! //Press any key to continue ----------------------------------------- //小端模式低地址存放最低位 #include "stdio.h" int main() {  int aa = 0x12345678;  printf("%x\n",aa);  printf("%x\n",*(char *)(aa));  printf("%x\n",*((char *)(aa)+1));  printf("%x\n",*((char *)(aa)+2));  printf("%x\n",*((char *)(aa)+3));  return 1; } //12345678 //78 //56 //34 //12 //Press any key to continue ----------------------------------------- //小端模式结构体中先定义的成员地址最低 #include "stdio.h" int main() {  typedef struct __BigSmallEndian  {   char a;   char b;   char c;   char d;  }BigSmallEndian;    BigSmallEndian Check;  printf("Check Address:%x\n",Check);  printf("Check.a Address:%x\n",(Check.a));  printf("Check.b Address:%x\n",(Check.b));  printf("Check.c Address:%x\n",(Check.c));  printf("Check.d Address:%x\n",(Check.d));  return 1; } //Check Address:18ff44 //Check.a Address:18ff44 //Check.b Address:18ff45 //Check.c Address:18ff46 //Check.d Address:18ff47 //Press any key to continue ----------------------------------------- #include "stdio.h" int main(int argc, char *argv ) {  char array = {'a','b',0,'A','B'};  printf("arrar Address:%x   ",array );printf("arrar value:%x\n",array );  printf("arrar Address:%x   ",array );printf("arrar value:%x\n",array );  printf("arrar Address:%x   ",array );printf("arrar value:%x\n",array );  printf("arrar Address:%x   ",array );printf("arrar value:%x\n",array );  printf("arrar Address:%x   ",array );printf("arrar value:%x\n",array ); } //arrar Address:18ff40   arrar value:61 //arrar Address:18ff41   arrar value:62 //arrar Address:18ff42   arrar value:0 //arrar Address:18ff43   arrar value:41 //arrar Address:18ff44   arrar value:42 //Press any key to continue
  • 热度 25
    2012-8-28 20:27
    1472 次阅读|
    2 个评论
    预备课:深刻理解大端模式与小端模式的概念。   大端模式(Big_endian):字数据的高字节存储在低地址中,而字数据的低字节存放在高地址中。 小端模式(Little_endian):字数据的高字节存储在高地址中,而字数据的低字节存放在低地址中。   例:0x12345678在内存中的存储为例: 大端模式内存布局: | 0x78 | 0x56 | 0x34 | 0x12 | ---------------高地址   小端模式内存布局: | 0x12 | 0x34 | 0x56 | 0x78 | ---------------高地址   但我们如何判别当前系统为大端模式还是小端模式呢?   方法1: INT32U i = 0x12345678; INT8U *p = (INT8U *)(i); if(p ==0x12) printf("Big_endian"); else printf("Little_endian");   注:方法1为个人觉得为最直接有效的方法,推荐!   方法2: 判别当前系统为大端模式还是小端模式有很多种方式,比如利用union型数据概念! union型数据所占的空间等于其最大成员所占的空间,对union型成员存取都从相对于该联合体基地址的偏移量为0处开始,也就是联合体的访问对哪个变量的存取都是从union的首地址位置开始。   int checksystem(void) { union check{ int i; char ch; }c; c.i= 1; return (c.ch==1); } 如果checksystem返回1则为大端模式,返回1为小端模式。   方法3: 除了以上方法外,当然我们可不不利用函数来判定,直接看内存即可,在此就不介绍了。   作者:tdyizhen1314 (现从事LED行业,专注于户外大型LED显示屏控制系统的研发,希望与大家一起交流,共同进步) 邮箱: 495567585@qq.com              td.logic@hotmail.com 更多文章查看请同外博客: http://www.cnblogs.com/tdyizhen1314/