看了一段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在这里应该没有什么用
看的是别人写好的一段代码,
在使用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在这里应该没有什么用