大小端存储

/*
+------------------------------------------------------------------------+
|     小端存储: 低地址存放低位数据;                                     |
|     例: int型数 0x12 34 56 78                                         |
|                     |        |                                         |
|                    高位     低位                                       |
|                                                                        |
|     ------------------------------------------                         |
|     1                                                                  |
|     ---------------------                                              |
|     &a      -> 0x0022FF54   -> 12345678                                |
|     ---------------------                                              |
|     &a[0]   -> 0x0022FF54   -> 78                                      |
|     &a[1]   -> 0x0022FF55   -> 56                                      |
|     &a[2]   -> 0x0022FF56   -> 34                                      |
|     &a[3]   -> 0x0022FF57   -> 12                                      |
+------------------------------------------------------------------------+

*/
#include <stdbool.h>
void test()
{
    int a = 0x12345678;
    printf("&a \t-> 0x%p\t-> %x\n"
           "---------------------\n"
           "&a[0]\t-> 0x%p\t-> %x\n" 
           "&a[1]\t-> 0x%p\t-> %x\n" 
           "&a[2]\t-> 0x%p\t-> %x\n" 
           "&a[3]\t-> 0x%p\t-> %x\n",
           &a, a,
           (char*)&a + 0, *((char*)&a + 0),
           (char*)&a + 1, *((char*)&a + 1),
           (char*)&a + 2, *((char*)&a + 2),
           (char*)&a + 3, *((char*)&a + 3));

}

bool is_little_endian(void)
{
    int a = 0x1;
    return *(int *)&a == a;

}
int main(int argc, char *argv[])
{
    
    printf("%d\n", is_little_endian());
    puts("---------------------");
    test();
    return 0;
}

  

原文地址:https://www.cnblogs.com/mathzzz/p/2669817.html