int a=0x12345678;
char b[4]={0,1,2,3};
memcpy(b,&a,4);//由a低地址的数据给b的低地址数据
b[0]=0x78 b[1]=0x56 b[2]=0x34 b[3]=0x12
可以看出,int变量低位数据存在4个字节地址空间的低地址位
memcpy(&a,b,4);
a=0x12340100
数组的地址是0最小,后面的按变量占地址位递增
这是在STM32 KEIL软件程序,数据是小端模式,即低位在前,高位在后
大端场景下根据定义的顺序,从 MSB 开始排布到 LSB。
小端场景下根据定义的顺序,从 LSB 开始排布到 MSB。
union {
unsigned int value;
unsigned char byte[4];
struct {
int A:7;
int B:10;
int C:3;
int D:2;
int E:9;
} field;
} v;
LEGEND: X = not used, MS = most significant, LS = least significant
Big-endian register
MS LS
A A A A A A A B B B B B B B B B B C C C D D E E E E E E E E E X
6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 2 1 0 1 0 8 7 6 5 4 3 2 1 0 X
31 0
Big-endian memory
Byte 0 Byte 1 Byte 2 Byte 3
A A A A A A A B B B B B B B B B B C C C D D E E E E E E E E E X
6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 2 1 0 1 0 8 7 6 5 4 3 2 1 0 X
Little-endian register
MS LS
X E E E E E E E E E D D C C C B B B B B B B B B B A A A A A A A
X 8 7 6 5 4 3 2 1 0 1 0 2 1 0 9 8 7 6 5 4 3 2 1 0 6 5 4 3 2 1 0
31 0
Little-endian memory
Byte 0 Byte 1 Byte 2 Byte 3
B A A A A A A A B B B B B B B B E E D D C C C B X E E E E E E E
0 6 5 4 3 2 1 0 8 7 6 5 4 3 2 1 1 0 1 0 2 1 0 9 X 8 7 6 5 4 3 2