/*
* 大端格式:字数据的高字节存储在低地址,而字数据的低字节则存储在高地址(数组第一字节存的是最大值)。
* 举例: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;
}
}