由于处理器不同以及数据存储方式的不同,造成了再不同平台下数据存在大小端存储的问题。
为了保持数据的一致性就要去数据在平台传输、转换过程中要保持相同的大小端数据格式。
常用的有16位、32位数据大小端数据转换,STM32中uint32_t 为32位无符号整形数据(unsigned int)。
方法1:
//32位大小端数据转换
#define BSWAP_32(x) \
(uint32_t)((((uint32_t)(x) & 0xff000000) >> 24) | \
(((uint32_t)(x) & 0x00ff0000) >> 8) | \
(((uint32_t)(x) & 0x0000ff00) << 8) | \
(((uint32_t)(x) & 0x000000ff) << 24) \
)
方法2:
//无符号整型32位大小端数据转换
uint32_tBSWAP_32(uint32_t x)
{
return (((uint32_t)(x) & 0xff000000) >> 24) | \
(((uint32_t)(x) & 0x00ff0000) >> 8) | \
(((uint32_t)(x) & 0x0000ff00) << 8) | \
(((uint32_t)(x) & 0x000000ff) << 24) ;
}
16位数据的大小端转换和上面类似。