系统的大端模式与小端模式

大端模式:高字节存放高地址
小端模式:高字节存放低地址
下面举个例子:
有int型数据0x12345678存放在地址0x00开始处,则大小端存放方法见下图
这里写图片描述

那么怎么验证系统是大端还是小端模式呢?
下面推荐两种方法:
1.用联合体来验证:

include <stdio.h>

int checknum()
{
    union check
    {
        int i;
        char ch;
    }c;
    c.i = 1;
    return (c.ch == 1);
}

int main(int argc, char **argv)
{
    int ret = checknum();
    if(ret)
    {
        printf("little endian\n");
    }
    else
    {
        printf("big endian\n");
    }


    return 0;
}

2.用字节地址来判断:

#include <stdio.h>
typedef unsigned char BYTE;
int main(int argc, char **argv)
{
    unsigned int num,*p;
    p = &num;
    num = 0;
    *(BYTE*)p = 0xff;
    if(num == 0xff)
    {
        printf("The endian of cpu is little\n");
    }
    else
    {
        printf("The endian of cpu is big\n");
    }

    return 0;
}

那么怎么实现大小端模式的转换呢?
其实这个很简单,只要进行.整数字节序转换就可以了。
//对应int32大小的成员 的转换 范例
int32_t swapInt32(int32_t value)
{
return ((value & 0x000000FF) << 24) |
((value & 0x0000FF00) << 8) |
((value & 0x00FF0000) >> 8) |
((value & 0xFF000000) >> 24) ;
}
后面的竖线是进行或运算,改成加号也可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值