大小端模式

所谓的大端模式,是指数据的高位,保存在内存的低地址中,而数据的低位,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;

所谓的小端模式,是指数据的高位保存在内存的高地址中,而数 据的低位保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。

具体内容看百度百科:http://baike.baidu.com/view/1922338.htm;

下面是一断代码,判断系统的大小端;

 int a = 0x12345678;//4个字节,a的值是0x12345678,高位到低位的字节依次是0x12、0x34、0x56和0x78
    printf("a=%x\n",a);
    unsigned char *p=(unsigned char *)&a;//p指向a的首地址,从低到高的地址依次是p[0],p[1],p[2],p[3]
    printf("p0=%x\n",p[0]);//78,0x78低位字节,存放在低地址中
    printf("p1=%x\n",p[1]);//56
    printf("p2=%x\n",p[2]);//34
    printf("p3=%x\n",p[3]);//12,高地址中
   // char *p=(char *)&a;
    if(0x78==p[0])
        {
            printf("小端\n");
            //如果低位存放在低位的地址中,那就是小端模式
        }else{
            printf("高端\n");
            //如果低位存放在高位的地址中,那就是大端模式
        }

还有一种方式: 通过声明一个联合( union )判断大小端模式

//union中元素的起始地址都是相同的——位于联合的开始
    union w
    {
        int a;
        char b;
    } c;
    c.a = 0x12345678;//所以a的值是0x12345678,高位到低位的字节依次是0x12、0x34、0x56和0x78
    //当给a赋值时,首地址自然也会存在一个值,那么了的值也就是a的首地址的值;
    if(c.b == 0x78){
        printf("小端\n");
        //如果b的值是ox78,那么a的低地址单元存放的是低位0x78;故是小端
    }else {
        printf("高端\n");
        //如果b的值不是ox78,那么a的低地址单元存放的不是低位0x78而是高位值;故是大端
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值