sprintf(&dd[i],"%0x",pkt_data[i]); 不是一一对应拷贝,why?

yingbinchina 2009-04-14 10:01:39
我用pcap_next_ex(adhandle, &header, &pkt_data)捕捉网络的数据,捕捉到的数据应该是放在了pkt_data中
我用下边的循环,将数据拷贝到了char数组中。
char dd[512];
for (int i=0;i<header->caplen;i++)
{
sprintf(&dd[i],"%0x",pkt_data[i]);
dd[i] = pkt_data[i];
}

但是:
当pkt_data[x] = 0xbd时,
dd[x] = 'b';
dd[x+1] = 'd';
为什么dd[x]不是0xbd。

也就是说一句sprintf(&dd[i],"%0x",pkt_data[i]);它将pkt_data的一个数据元素放到了dd的两个数据元素位置中,而不是一一对应,这是为什么呢?谢谢!
...全文
174 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2009-04-14
  • 打赏
  • 举报
回复
sprintf(&dd[2*i],"%02x",pkt_data[i]); 复制两个字节...
  • 打赏
  • 举报
回复
哦,你可能有中文字符,那就改成
for (int i=0;i <header->caplen;i++)
{
sprintf(&dd[2*i],"%02x",pkt_data[i]); //一次写2字节
}
  • 打赏
  • 举报
回复
for (int i=0;i <header->caplen;i++)
{
sprintf(&dd[i],"%0x",pkt_data[i]);    //这里改成%02x看看
dd[i] = pkt_data[i];      //这里为何要再赋值,覆盖前面的操作???
}



for (int i=0;i <header->caplen;i++)
{
sprintf(&dd[i],"%02x",pkt_data[i]);
}
jameshooo 2009-04-14
  • 打赏
  • 举报
回复
sprintf(&dd[i*2], "%02x", pkt_data[i]);

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧