用C语言实现判断PC大小端

来源:互联网 发布:女包淘宝网 编辑:程序博客网 时间:2024/05/16 07:39

     (1)采用大小模式对数据进行存放的主要区别在于在存放的字节顺序,大端方式将高位(一个字节大小)存放在低地址,小端方式将低位存放在高地址(储存都是一个一个字节的)。采用大端方式 进行数据存放符合人类的正常思维,而采用小端方式进行数据存放利于计算机处理因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8bit的char(这种数据刚好是储存一个字节)之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如果将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。

      (2)在32 位的系统上

       char 咔出来的内存大小是1 个byte。 

       short 咔出来的内存大小是2 个byte;

  int 咔出来的内存大小是4 个byte;

  long 咔出来的内存大小是4 个byte;

  float 咔出来的内存大小是4 个byte;

  double 咔出来的内存大小是8 个byte;

 (注意这里指一般情况,可能不同的平台还会有所不同,具体平台可以用sizeof 关键字测试一下)

如果将一个16位的整数0x1234存放到一个短整型变量(short:占两字节)中。这个短整型变量在内存中的存储在大小端模式由下表所示。(储存总是从低字节开始,也就是说一个储存区首地址是指其最低地址)

 

地址偏移

大端模式

小端模式

0x00

12(OP0)

34(OP1)

0x01

34(OP1)

12(OP0)


(3)程序

         程序1:

    1. #include <stdio.h>
    2. int main()
    3. {
    4.     short int x;
    5.     char x1,x2;
    6.     x = 0x1122;
    7.     x1 = ((char *)&x)[0];    //低地址
    8.     x2 = ((char *)&x)[1];    //高地址
    9.     printf("x1=%x\n",x1);
    10.     printf("x2=%x\n",x2);
    11.     return 0;
    12. }

若x1=0x11,则是大端; 若x2=0x22,则是小端......

或:程序2:

点击(此处)折叠或打开

    1. #include<stdio.h>

    2. int main()
    3. {
    4.     int x = 1;
    5.     char *= (char *)&x;   //p指向x的首地址(最低地址)

    6.     if(*p)
    7.     {
    8.         printf("little\n");
    9.     }
    10.     else
    11.     {
    12.         printf("large\n");
    13.     }
    14.     return 0;
    15. }

0 0
原创粉丝点击