在C语言中,常常需要将txt文件转换成bin文件,所以需要将两字节的字符,转换成16进制的unsigned char类型。有时也会将int型转换成两字节的char,还原时也需要转换。
/*!
@Brief
Two char data are combined into an unsigned char data
@Param
cVariety1 [Merged into unsigned char's high 4 bits]
cVariety2 [Merged into the lower 4 bits of unsigned char]
@Return
The value of a hexadecimal unsigned char
-------------------------------------------------------------------------------
*/
unsigned char ucMergeTwoCharsTouc(unsigned char cVariety1, unsigned char cVariety2)
{
unsigned char ucTmp = 0;
if( ((cVariety1 >= 'A') && (cVariety1 <= 'F')) &&
((cVariety2 >= 'A') && (cVariety2 <= 'F')) )
{
ucTmp = (cVariety1 - 'A' + 10 << 4) | (cVariety2 - 'A' + 10);
}
else if ( ((cVariety1 >= 'A') && (cVariety1 <= 'F')) &&
((cVariety2 >= '0') && (cVariety2 <= '9')) )
{
ucTmp = (cVariety1 - 'A' + 10 << 4) | (cVariety2 - '0');
}
else if ( ((cVariety1 >= '0') && (cVariety1 <= '9')) &&
((cVariety2 >= 'A') && (cVariety2 <= 'F')) )
{
ucTmp = (cVariety1 - '0' << 4) | (cVariety2 - 'A' + 10);
}
else if ( ((cVariety1 >= '0') && (cVariety1 <= '9')) &&
((cVariety2 >= '0') && (cVariety2 <= '9')) )
{
ucTmp = (cVariety1 - '0' << 4) | (cVariety2 - '0');
}
return ucTmp;
}
/*!
@Brief
Two char data are combined into an int data
@Param
cVariety1 [Merged into unsigned char's high 4 bits]
cVariety2 [Merged into the lower 4 bits of unsigned char]
@Return
A value of type int
-------------------------------------------------------------------------------
*/
int iMergeTwoCharsToInt(unsigned char cVariety1, unsigned char cVariety2)
{
int iTemp = 0;
if( ((cVariety1 >= 'A') && (cVariety1 <= 'F')) &&
((cVariety2 >= 'A') && (cVariety2 <= 'F')) )
{
iTemp = ((cVariety1 - 'A' + 10) * 16) + (cVariety2 - 'A' + 10);
}
else if ( ((cVariety1 >= 'A') && (cVariety1 <= 'F')) &&
((cVariety2 >= '0') && (cVariety2 <= '9')) )
{
iTemp = ((cVariety1 - 'A' + 10) * 16) + (cVariety2 - '0');
}
else if ( ((cVariety1 >= '0') && (cVariety1 <= '9')) &&
((cVariety2 >= 'A') && (cVariety2 <= 'F')) )
{
iTemp = ((cVariety1 - '0') * 16) + (cVariety2 - 'A' + 10);
}
else if ( ((cVariety1 >= '0') && (cVariety1 <= '9')) &&
((cVariety2 >= '0') && (cVariety2 <= '9')) )
{
iTemp = ((cVariety1 - '0') * 16) + (cVariety2 - '0');
}
return iTemp;
}