在一个函数中,得到 unsigned char && unsigned char 长度,
void pcap_callback(u_char *args, const struct pcap_pkthdr* pkthdr, const u_char* packet)
{
std::vector<unsigned char> vec(packet, packet+pkthdr->len); // optimized from foo.
std::stringstream scp;
for (int i=0;i<pkthdr->len;i++) {
scp<<vec[i];
}
std::string mystr = std::string(scp.rdbuf()->str());
std::cout << "WAS: " << packet << std::endl;
std::cout << "GOOD: " << scp.str() << std::endl;
std::cout << "BAD: " << scp.str().c_str() << std::endl;
std::cout << "TEST: " << mystr.size() << std::endl;
assert(mystr.size() == pkthdr->len);
}
结果:
- WAS:什么都不打印(猜想有一个指向 const .. case 的指针)
- 好:打印数据
- BAD:什么都不打印
- 测试,断言:打印 mystr.size() 等于传递的无符号字符大小。
我试过:
- string.assign(scp.rdbuf());
- memcpy(char, scp.str(), 10);
- 创建/分配临时字符、字符串的不同方法
没有帮助..它想要获得一个包含数据的std::cout 'able std::string (从foo中挑选,它是unsigned char,它是数据包数据)。
猜测原始foo可能不是以空值终止的,或者问题是这样的 - 简单,但无法进入......这里要寻找什么?
(此代码是使用 libpcap 的另一种尝试,只是以 C++ 方式打印数据包,而不使用已知的 C++ 魔术包装器,如 libpcapp)。