大端模式:即高位字节排放在内存地址低地址端,低位字节排放在内存的高地址端。
小端模式:即低位字节排放在内存地址低地址端,高位字节排放在内存的高地址端。
举个例子:
大端模式:
数字0x12 34 56 78 在内存中的表示形式为:
低地址------------------>高地址
0x12 | 0x34 | 0x56 | 0x78
小端模式:
低地址------------------>高地址
0x78 | 0x56 | 0x34 | 0x12
16bit宽的数0x1234在小端模式及大端模式CPU中存放的方式(假设从0x4000开始存放)为:
32bit宽的数0x12345678在小端模式及大端模式CPU中存放的方式(假设地址从0x4000开始存放)为:
数组在大小端下的存储
//高字节在前
databuf[datacount++] = (uint8_t)(len >> 8);
databuf[datacount++] = (uint8_t)(len);
在自定义协议中,如果协议规定了数据是以大端模式存储和发送的,那么发送的数据包将遵循大端模式。这意味着数据的高字节,会先被发送,而低字节会后被发送。
上位机在接收这些数据时,会按照相同的顺序解析它们 ,因为上位机和下位机之间遵循相同的协议。上位机会知道数据是以大端模式存储的,因此会正确地解析数据。
注:串行通信(如UART)发送数据时,数据是从数组的低地址位置开始发送的,因此上位机在接收数据时会首先接收到存储在高字节位置的数据,然后是低字节位置的数据。