读书人

关于输出控制(使用了sprintf进行格式

发布时间: 2012-08-09 15:59:22 作者: rapoo

关于输出控制(使用了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]);

读书人网 >C语言

热点推荐