我用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的两个数据元素位置中,而不是一一对应,这是为什么呢?谢谢!

解决方案 »

  1.   

    sprintf(&dd[i*2], "%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]); 

      

  3.   

    哦,你可能有中文字符,那就改成
    for (int i=0;i <header->caplen;i++) 

    sprintf(&dd[2*i],"%02x",pkt_data[i]);     //一次写2字节
      

  4.   

    sprintf(&dd[2*i],"%02x",pkt_data[i]); 复制两个字节...