一、简介
是数据本身的高低位转换,而不是大小端数据转换
一、8位数据的高低位转换
static u8 data_swap_u8(u8 data)
{
data = ((data >> 1u) & 0x55u) | ((data & 0x55u) << 1u) ;
data = ((data >> 2u) & 0x33u) | ((data & 0x33u) << 2u) ;
data = ((data >> 4u) & 0x0fu) | ((data & 0x0fu) << 4u) ;
return data;
}
二、16位数据的高低位转换
static u16 crc_swap_u16(u16 data)
{
data = ((data >> 1u) & 0x5555u) | ((data & 0x5555) << 1u) ;
data = ((data >> 2u) & 0x3333u) | ((data & 0x3333) << 2u) ;
data = ((data >> 4u) & 0x0f0fu) | ((data & 0x0f0f) << 4u) ;
return ((data >> 8u) | (data << 8u));
}
三、32位数据的高低位转换
static u32 data_swap_u32(u32 value)
{
value = ((value >> 1u) & 0x55555555u) | ((value & 0x55555555u) << 1u);
value = ((value >> 2u) & 0x33333333u) | ((value & 0x33333333u) << 2u);
value = ((value >> 4u) & 0x0F0F0F0Fu) | ((value & 0x0F0F0F0Fu) << 4u);
value = ((value >> 8u) & 0x00FF00FFu) | ((value & 0x00FF00FFu) << 8u);
return ((value >> 16u) | (value << 16u));
}