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;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值