大小端问题

为什么要判断大小端:

         因为在计算机中,我们是以字节为单位的,每个地址单元对应着一个字节,一个字节8bit。在编程语言中,除了1字节的char还有几个字节的int, short等数据类型,既然不止一个字节,那么就存在如何将多个字节排序的问题,由此就导致了大小端模式。

 

大小端区别:

         大端字节是指在一个整数的高位字节(23-31 bit)存储在内存的低地址处,低位字节(0-7 bit)存在内存的高地址处。小端则正好相反。

         例如一个16bit的short型x,在内存中的地址为0x0010,x的值为0x1122,那么0x11为高字节,0x22为低字节。对于大端模式,就将0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,刚好相反。

 

如何用程序判断主机是大端还是小端:

 

//结合以上给出的例子
//联合体union的存放顺序是所有成员都从低地址开始存放,利用该特性可以轻松地获得了CPU对内存采用Little-endian还是Big-endian模式读写:
void byteorder()
{
    union
    {
        short value;
        char union_bytes[sizeof(short)];
    }test;
    test.value = 0x0102;
    if ((test.union_bytes[0] == 1) &&(test.union_bytes[1] == 2))
        printf("bigedition\n");
    else if ((test.union_bytes[0] == 2) &&(test.union_bytes[1] == 1))
        printf("smalledition");
    else
        printf("unknown");
}
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值