批量转换连续内存中的16位或32位数据。
/*******************************************************************
函数名: void EndianSwap(uint8 *src, BYTETYPE byteType, uint8 byteLen)
函数描述:大小端转换
参数: @src: 指向数据起始地址的指针
@byteType:需要转换的数据类型
@byteLen:数据字节长度,当byteType=BYTE_4时,byteLen是4的倍数
当byteType=BYTE_2时,byteLen是2的倍数
*******************************************************************/
void EndianSwap(uint8 *src, BYTETYPE byteType, uint8 byteLen)
{
uint16 *usP;
uint32 *uiP;
uint8 *ptmp;
uint8 uci;
if(byteType == BYTE_4)
{
if((byteLen % 4) != 0)
return;
uiP = (uint32*)src;
for(uci = 0; uci < byteLen/4; uci++)
{
ptmp = (uint8*)uiP;
ptmp[0] = ptmp[0] ^ ptmp[3];
ptmp[3] = ptmp[0] ^ ptmp[3];
ptmp[0] = ptmp[0] ^ ptmp[3];
ptmp[1] = ptmp[1] ^ ptmp[2];
ptmp[2] = ptmp[1] ^ ptmp[2];
ptmp[1] = ptmp[1] ^ ptmp[2];
uiP++;
}
}
else if(byteType == BYTE_2)
{
if((byteLen % 2) != 0)
return;
usP = (uint16*)src;
for(uci = 0; uci < byteLen/2; uci++)
{
ptmp = (uint8*)usP;
ptmp[0] = ptmp[0] ^ ptmp[1];
ptmp[1] = ptmp[0] ^ ptmp[1];
ptmp[0] = ptmp[0] ^ ptmp[1];
usP++;
}
}
}