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

大端模式:高字节存放高地址
小端模式:高字节存放低地址
下面举个例子:
有int型数据0x12345678存放在地址0x00开始处,则大小端存放方法见下图
系统的大端模式与小端模式_第1张图片

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

include 

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 
typedef unsigned char BYTE;
int main(int argc, char **argv)
{
    unsigned int num,*p;
    p = #
    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) ;
}
后面的竖线是进行或运算,改成加号也可以。

你可能感兴趣的:(C语言,C语言的小知识点,C语言的学习历程,大端模式,小端模式,大小端模式转换,判断大小端模式)