大端还是小端

Big endian machine: It thinks the first byte it reads is the biggest.
Little endian machine: It thinks the first byte it reads is the littlest.

举个例子,从内存地址0x0000开始有以下数据
 0x0000     0x12
 0x0001     0x34
 0x0002     0xab
 0x0003     0xcd
如果我们去读取一个地址为0x0000的四个字节变量,若字节序为big-endian,则读出
结果为0x1234abcd;若字节序位little-endian,则读出结果为0xcdab3412.
如果我们将0x1234abcd写入到以0x0000开始的内存中,则结果为
                big-endian     little-endian
0x0000     0x12              0xcd
0x0001     0x23              0xab
0x0002     0xab              0x34
0x0003     0xcd              0x12
x86系列CPU都是little-endian的字节序.
 

1 #include<stdio.h>
      2
      3 int main()
      4 {
      5         int x=1;
      6         /*the first method */
      7         if(*(char *) &x==1)
      8                 printf("little/n");
      9         else
     10                 printf("big/n");
     11         /*the second method*/
     12         x = (char)x;
     13         if(x == 1)
     14                 printf("little/n");
     15         else
     16                 printf("big/n");
     17
     18         /*the third method*/
     19         union
{
     21                 int i;
     22                 char c[sizeof(int)];
     23         }y;
     24         y.i =1;
     25         if(y.c[0] == 1)
     26                 printf("little/n");
     27         else
     28                 printf("big/n");
     29
     30 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值