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 へのポインタがあると思います)
- GOOD:印刷データ
- 悪い: 何も印刷しない
- テスト、アサート: mystr.size() が渡された unsigned char サイズと等しいことを出力します。
私は試した:
- string.assign(scp.rdbuf());
- memcpy(文字、scp.str()、10);
- 一時的な文字、文字列を作成/割り当てるさまざまな方法
助けはありません..データを含むstd ::cout 'able std::stringを取得する必要があります(パケットデータであるunsigned charであるfooから選択されました)。
元のfooがヌルで終了していない可能性があるか、問題は次のようなものであると推測します-単純ですが、入ることができません..ここで探すべきものは何ですか?
(このコードは、libpcapp のような既知の C++ マジック ラッパーを使用せずに、C++ の方法でパケットを出力するためだけに、libpcap を使用する別の試みです)。