в функции, которая получает unsigned char && unsigned char length,
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)
- GOOD: печатает данные
- BAD: ничего не печатает
- TEST, assert: печатает, что mystr.size () равно переданному размеру без знака.
Я пытался:
- string.assign (scp.rdbuf ());
- memcpy (char, scp.str (), 10);
- различные методы создания / выделения временных символов, строк
Нет помощи .. требуется получить std :: cout 'able std:: строка , содержащая данные (которая была выбрана из foo , которая была unsigned char , которая была пакетными данными).
Угадайте либо оригинал foo может не заканчиваться нулем, или проблема в чем-то вроде этого - просто, но не может войти ... что искать здесь?
(этот кодеще одна попытка использовать libpcap, just для печати пакетов способом C ++, без использования известных магических оболочек C ++, таких как libpcapp).