c语言实现u8、u16、u32相互转换
不同数据类型的转换,分大小端模式,下面分享我经常用的转换方式。
1、u8 to u16
u16 DataToUnshort(u8 *pBuffer, u8 uModeFlag)
{
u16 uShort = 0;
uShort = *pBuffer++;
if(USING_MODE_BIG == uModeFlag)
{
/* 大端模式 */
uShort = (uShort << 8) | (*pBuffer);
}
else
{
/* 小端模式 */
uShort |= (*pBuffer) << 8;
}
return uShort;
}
2、u16 to u8
void DataToUnchar(u8 *pBuffer, u16 uShort, u8 uModeFlag)
{
if(USING_MODE_BIG == uModeFlag)
{
/* 大端模式 */
*pBuffer++ = (uShort >> 8) & 0xFF;
*pBuffer = uShort & 0xFF;
}
else
{
/* 小端模式 */
*pBuffer = uShort & 0xFF;
pBuffer++;
*pBuffer = (uShort >> 8) & 0xFF;
}
}
3、u8 to u32
u32 DataToUnint(u8 *pBuffer, u8 uModeFlag)
{
u32 uInt = 0;
if(USING_MODE_BIG == uModeFlag)
{
/* 大端模式 */
uInt = DataToUnshort(pBuffer, USING_MODE_BIG);
uInt <<= 16;
uInt |= DataToUnshort(pBuffer + 2, USING_MODE_BIG);
}
else
{
/* 小端模式 */
uInt = DataToUnshort(pBuffer + 2, USING_MODE_SMALL);
uInt <<= 16;
uInt |= DataToUnshort(pBuffer, USING_MODE_SMALL);
}
return uInt;
}
4、u32 to u8
void UnIntToData(u8 *pData, u32 uInt, u8 uModeFlag)
{
u16 uShort = 0;
if(USING_MODE_BIG == uModeFlag)
{
/* 大端模式 */
uShort = (u16)(uInt >> 16);
DataToUnchar(pData, uShort, USING_MODE_BIG);
uShort = (u16)uInt;
pData += 2;
DataToUnchar(pData, uShort, USING_MODE_BIG);
}
else
{
/* 小端模式 */
uShort = (u16)uInt;
DataToUnchar(pData, uShort, USING_MODE_SMALL);
uShort = (u16)(uInt >> 16);
pData += 2;
DataToUnchar(pData, uShort, USING_MODE_SMALL);
}
}