cpu大小端測試

/*
 *  大端格式:字數據的高字節存儲在低地址,而字數據的低字節則存儲在高地址(數組第一字節存的是最大值)。
 *  舉例:51單片機
 *  小端格式:高存高地址,低存低地址(數組第一字節存的是最小值)。
 *  舉例:AVR  PIC  430  cortexM3 esp8266
 *  大端格式:即低地址存高位數據
 *  小端格式:即低地址存低位數據
 *  舉個例子:
 *  首先聲明一個int變量 a = 0x12345678; a的地址爲0x00600000;
 *  那麼以小端存儲爲:
 *      0x00600000  0x78;
 *      0x00600001  0x56;
 *      0x00600002  0x34;
 *      0x00600003  0x12;
 *  若以大端方式存儲:
 *      0x00600000  0x12;
 *      0x00600001  0x34;
 *      0x00600002  0x56;
 *      0x00600003  0x78;
 *  
 *  union rgb_t
 *  {
 *      uint8_t buf[4];
 *      uint32_t val;
 *  } cfg_rgb_t;
 *  
 *  uint32_t a = 0x12345678;
 *  cfg_rgb_t.val = a;
 *  
 *  I (669) app main: cfg_rgb_t.buf[3]:18        , cfg_rgb_t.buf[2]:52        , cfg_rgb_t.buf[1]:86        , cfg_rgb_t.buf[0]:120
 *  I (669) app main: cfg_rgb_t.buf[3]:0x12      , cfg_rgb_t.buf[2]:0x34      , cfg_rgb_t.buf[1]:0x56      , cfg_rgb_t.buf[0]:0x78
 *  I (669) app main: cfg_rgb_t.buf[3]:0x3FFF04E3, cfg_rgb_t.buf[2]:0x3FFF04E2, cfg_rgb_t.buf[1]:0x3FFF04E1, cfg_rgb_t.buf[0]:0x3FFF04E0
 */

static uint8_t cpu_endian;

void find_cpu_endian(void)
{
    int x = 0x00000001;

    if (*(char *)&x == 0x01)
    {
        /* 小端模式 */
        cpu_endian = 0;
    }
    else
    {
        /* 大端模式 */
        cpu_endian = 1;
    }
}

 

發佈了18 篇原創文章 · 獲贊 2 · 訪問量 6047
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章