如何判断大小端模式

    int、float等数据类型在内存地址中是有大小端之分的,每次用到的时候都会搞不清大小端的存储顺序,这次索性写下来加深一下印象。

    大端模式,指的是数据的高位部分存储在内存地址的低字节,低位存储在高字节,以int型的0x12345678为例,在内存地址的实际存储用四个字节数组来表示,则其应该是这样的:

    data[0]=0x12,data[1]=0x34,data[2]=0x56,data[3]=0x78

    可以看到,大端模式下,可以简单的理解成值的存储顺序和实际值的顺序是一致的,实际值为0x12345678,存储的顺序也是0x12、0x34、0x56、0x78。

 

    小端模式,指的是数据的高位部分存储在内存地址的高字节,低位存储在低字节,还是以int型的0x12345678为例,在内存地址的实际存储用四个字节数组来表示,则其应该是这样的:

    data[0]=0x78,data[1]=0x56,data[2]=0x34,data[3]=0x12

    可以看到,值的存储顺序和实际值的顺序是相反的,实际值为0x12345678,存储的顺序也是0x78、0x56、0x34、0x12。

 

    那么,如何使用c语言来判断系统是大端模式还是小端模式呢,这边给出一个简单的判断例子

    int16_t x = 1;

    /*处理器字节顺序判断*/
    if (*(char*) &x == 1)
    {
        cpu_byte_order = LITTLE_ENDIAN; //小端模式
    }
    else
    {
        cpu_byte_order = BIG_ENDIAN; //大端模式
    }

 

你可能感兴趣的:(如何判断大小端模式)