我有来自Wireshark的数据,采用C数组格式,现在我很难以正常形式解码它

时间:2015-08-30 12:05:14

标签: c++ c arrays string wireshark

以下是我从wireshark获得的数据,但无法破解它。

char peer0_13[] = {
0x02, 0xb6, 0x8d, 0x7c, 0x7a, 0x56, 0x2f, 0x06, 
0xde, 0x6c, 0xd9, 0x55, 0x78, 0xd3, 0x12, 0xf9, 
0xe5, 0x4a, 0x57, 0x02, 0xdc, 0xb7, 0x1c, 0x75, 
0x5b, 0x9c, 0x51, 0x51, 0x3e, 0x2a, 0x3a, 0x9a, 
0xca, 0x50, 0xeb, 0x40, 0x28, 0x05, 0x00, 0xa0, 
0x14, 0x02, 0x80, 0x50, 0x0a, 0x01, 0x40, 0x28, 
0x05, 0x00, 0xa0, 0x14, 0x02, 0x80, 0x50, 0x0a, 
0x01, 0x40, 0x28, 0x05, 0x00, 0xa0, 0x14, 0x02, 
0x80, 0x50, 0x0a, 0x01, 0x40, 0x28, 0x05, 0x00, 
0xa0, 0x14, 0x02, 0x80, 0x50, 0x0a, 0x01, 0x40, 
0x28, 0x05, 0x00, 0xa0, 0x14, 0x02, 0x80, 0x50, 
0x0a, 0x01, 0x40, 0x28, 0x05, 0x00, 0xa0, 0x14, 
0x02, 0x80, 0x50, 0x0a, 0x01, 0x40, 0x28, 0x05, 
0x00, 0xa0, 0x14, 0x02, 0x80, 0x50, 0x0a, 0x01, 
0x40, 0x28, 0x05, 0x00, 0xa0, 0x14, 0x02, 0x80, 
0x50, 0x0a, 0x01, 0x40, 0x28, 0x05, 0x00, 0xa0, 
0x14, 0x02, 0x80, 0x50, 0x0a, 0x01, 0x40, 0x28, 
0x05, 0x00, 0xa0, 0x14, 0x02, 0x80, 0x50, 0x0a, 
0x01, 0x40, 0x28, 0x05, 0x00, 0xa0, 0x14, 0x02, 
0x80, 0x50, 0x0a, 0x01, 0x40, 0x28, 0x05, 0x00, 
0xa0, 0x3f, 0xff, 0xd9 };

我没有得到如何将此数据转换为纯文本/字符串以便于阅读。

以下是我用于获取纯文本的一些手动技巧。 (第一种解决方案不能正常工作,因为它给了我垃圾值。)

#1.
    for (int i = 0; i <= sizeof (peer0_13); i++)
    {
        printf ("%c",peer0_13[i]);
    }

#2.
    cout << peer0_13 << endl ;

#3.
    printf ("%s\n", peer0_13);

请帮助将此数据转换为普通字符串。 任何帮助将不胜感激。 :)

1 个答案:

答案 0 :(得分:2)

您不能将上面的char矢量转换为String,因为我在最后一行之前看到了0x00。 char[]String但如果您需要将其数据复制到普通字符串中,则必须使用循环逐个将所有字符复制到空字符串,但 0x00 value将截断字符串。

请注意,在第一个循环中,您需要将条件更改为i < sizeof (peer0_13)并使用等号来提升索引超出范围的错误。

如果您打算将char数组读取为人类可以理解的字符串,并且您只需将其打印出来,则必须在将其复制到字符串中时排除空字符(0x00)或从中删除空字符数组,只需使用带有printf的%s。