看了一段socket的代码,有几处不明白,该如何解决

看了一段socket的代码,有几处不明白
看的是别人写好的一段代码,
在使用socket之前要约定好传送数据的格式,这样在将数据输入后,将需要的数据取出。
本例就是这样,输入的字段存入buff[7]中,然后程序的意思是将buff[2],buff[3]的数据取出,通过charToNum(buff[2],buff[3])对数据进行处理。
其中charToNum(char   char1,char   char2)的函数定义如下:
charToNum(XXX,XXX)
{
      int   tmpt1,tmpt2;
      if(char1> = 'A '&&char1 <= 'F ')
{
tmpt1   =   char1   -   'A '+0x0A;
}
else   if(char1> = 'a '&&char1 <= 'f ')
{
tmpt1   =   char1- 'a '+0x0A;
}
else   if(char1> = '0 '&&char1 <= '9 ')
{
tmpt1   =   char1   -   '0 ';
}
       
        if(char2> = 'A '&&char2 <= 'F ')
{
tmpt2   =   char2   -   'A '+0x0A;
}
else   if(char2> = 'a '&&char2 <= 'f ')
{
tmpt2   =   char2- 'a '+0x0A;
}
else   if(char2> = '0 '&&char2 <= '9 ')
{
tmpt2   =   char2   -   '0 ';
}
return(   (tmpt1*16+tmpt2)&0xFF);
}
对于   例如tmpt2   =   char2   -   'A '+0x0A的语句中为什么最好要加上0x0A呢??还有就是最后的return   语句,tmpt*16得到的是什么?最后与上0xFF后又得到的是什么结果呢???
真的有些想不明白   这段程序得到的是什么。望牛人相助!

------解决方案--------------------
0x0A就是十进制的10,这里0-9直接返回0-9,如果是字符,A算作10,依次类推返回
------解决方案--------------------
tmpt*16相当于把tmpt左移4位,加上tmpt2凑成一个8位的WORD类型,&0xff在这里应该没有什么用