C语言之大小端模式


//little endian: the least significant byte at lowest address.
//big-endian: the most significant byte at lowest address.
int checkSystem()
{
   //union size is the largest size of its fields. And all fields are stored right from lowest address.
   union check{
      int i;
      char ch; //stored at the lowest byte.
   }c;

   c.i = 1;
   return (c.ch == 1);
}


int main()
{
/*
 * value: 12345678 //output digits from highest byte to lowest byte
 * p[0]: 78 //'78' is the least significant byte. p[0] locates at the lowest address.
 * p[1]: 56
 * p[2]: 34
 * p[3]: 12 //'12' is the most significant byte. p[3] locates at the highest address.
 * ptr1[-1]: 4
 * *ptr2: 2000000 //output digits from highest byte to lowest byte, so '02' comes first. when big-endian, *ptr2: 0x100
*/

printf("%s\n", checkSystem()?"Little-Endian":"Big-Endian");

int i;
int value = 0x12345678;
printf("value: %x\n", value);
char *p = (char*)&value;
for(i=0; i<4;i++)
{
   printf("p[%d]: %x\n", i, p[i]);
}


int a[4] = {1,2,3,4};//1: 0x00000001, 2: 0x00000002, 3: 0x00000002, 4: 0x00000004.
int *ptr1 = (int*)(&a+1); //ptr1 points to the ending address of array a: the integer right after array a.
int *ptr2 = (int*)((int)a+1); //ptr2 points to starting (low) address of the second byte of a[0]


printf("ptr1[-1]: %x\n*ptr2: %x\n", ptr1[-1], *ptr2);
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值