最近写STM32程序,用到了共用体,由此,引发了疑问。
比如:将0x12345678存储到一个U32类型的变量里面。大端和小端分别是这样存储的。
大端存储:【高字节放在低地址】
低地址 …… 高地址
0x 12 34 56 78
小端存储:【高字节放在高地址,低字节放在低地址】
低地址 …… 高地址
0x 78 56 34 12
内存堆栈中,在栈内存中,地址的增长方向是从高到低的,但是,这是以变量之间为参照的。对于一个char型的数据,其内部各个元素的地址位置,仍旧是从低到高的,即
无论在堆还是栈内存中,[0] [1] [2] ....的地址是依次增高的。
详细的可以看上边链接。
看代码
#include "stm32f10x.h"
struct s
{
u32 a;
u8 b;
};
union B
{
u8 c[5];
struct s s_1;
};
union B BB;
int main(void)
{
BB.s_1.a=0x12345678;
BB.s_1.b=0x09;
while(1);
}
输出结果:
可见,[0]为低地址存储着低字节的0x78;[3]为高地址存储着高字节的0x12;存储形式为小端存储。