数据存储的大小端格式问题记录

大小端定义:

大端格式:即数据的高位存在低地址,如0x11223344,在存储器中从低到高的存储顺序就是0x11,0x22,0x33,0x44

小端格式:即数据的高位存在高地址,如0x11223344,在存储器中从低到高的存储顺序就是0x44,0x33,0x22,0x11

大端格式会更好理解一点,因为它是顺序的;小端格式会需要转换一下。

STM32的内存和flash都是按照小端格式存储的。

如何判别大小端:

1.判别RAM的大小端

方法1:定义一个32位变量,给其赋值0x11223344,再定义一个8位指针,将其指向32位变量的首地址,再打印出该指针所指向位置的内容,如果是0x44则为小端,反之则为大端,如下:

int datatt=0x11223344;
u8 *ptr=(u8 *)&datatt;
printf("ptr=%x\n",ptr[0]);

方法2:定义一个联合体:

union test_union
{
    u8 data_byte[4];
    u32 data_int;
}

给其中的 data_int 赋值0x11223344,然后再打印出 data_byte[0],如果是0x44即为小端格式,反之则为大端。

2.判别flash的大小端

将上述方法1中的32位变量改为只读的(全局变量),其余操作一样;因为只读变量是存储在flash中的。

猜你喜欢

转载自blog.csdn.net/u011764302/article/details/108464903