首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于输出控制(使用了sprintf进行格式化)的有关问题,感到十分纠结,跪求大牛们帮助

2012-08-09 
关于输出控制(使用了sprintf进行格式化)的问题,感到十分纠结,跪求大牛们帮助~小菜近期在看一本名叫《小小黑

关于输出控制(使用了sprintf进行格式化)的问题,感到十分纠结,跪求大牛们帮助~
小菜近期在看一本名叫《小小黑客之路》的葵花宝典,在看到嗅探器一章时,有一段显示捕获数据输出的代码,以十六进制输出。整个程序用了winpcap开发包,因此只需要对捕获到的数据包进行分析,具体如下:

定义一个字符指针*ptr,指向数据

以下代码的外层有一个大的i的循环,数据长度是多少,循环多少次

if (i%16==0&&i!=0) //每行显示16个字符
{
strcat(Buf,"\r\n"); //Buf存放格式化好的字串,也是char型
}
if (ptr[i]=='\0') //是否已经获取完
{
strcat(Buf,"00 ");
}
else
{
char temp[10] = {0}; //从这里开始我就不太明白了,为什么temp要定义为10个字节
sprintf(temp,"%02x ",ptr[i]);
if (strstr(temp,"ffffff")!=NULL) //特别是这里,为什么要用来和“ffffff”比较,有什么意义呢?
{
strcpy(temp,temp+6); //这里为什么要从第六个字节开始复制呢?是不是跟用sprintf函数有关呢?
}
strcat(Buf,temp);
}

小菜已困扰多时,本人深知自己基本功不扎实,真心求大牛帮助~谢谢

[解决办法]
上边的那些红色代码是当ptr中含有中文字符的时候去做处理的,比如,当ptr[i]="中"的时候,执行完sprintf(temp,"%02x ",ptr[i]);这句temp="ffffffd6"
[解决办法]
char temp[10] = {0}; //从这里开始我就不太明白了,为什么temp要定义为10个字节
sprintf(temp,"%02x ",ptr[i]);
if (strstr(temp,"ffffff")!=NULL) //特别是这里,为什么要用来和“ffffff”比较,有什么意义呢?
{
strcpy(temp,temp+6); //这里为什么要从第六个字节开始复制呢?是不是跟用sprintf函数有关呢?
}
改为
char temp[4];
sprintf(temp,"%02x ",(unsigned char)ptr[i]);

热点排行