【发布时间】:2015-05-03 08:32:08
【问题描述】:
我正在使用 RAW 套接字来捕获 udp 数据包。捕获后我想解析数据包并查看里面的内容。
我从套接字获得的输入是一个 unsigned char* 缓冲区,它是长度。我试图将缓冲区放入一个字符串中,但我想我做错了,因为当我检查字符串时它是空的。
有什么建议吗?
【问题讨论】:
-
缓冲区可能包含
'\0'值,您是如何从缓冲区分配std::string的?assign()函数有一个版本,它需要明确的大小来传输。 -
环顾四周后,我尝试了:std::string s(reinterpret_cast
(buffer), buff_len); -
我最近有一个类似的案例,决定使用
std::array<uint8_t,PACKET_LENGTH>来存储原始数据包数据。但是我有来自该协议的所有数据包,它们具有固定大小,这是预先知道的。另一个合适的类型是std::vector<uint8_t>。 -
您能否举例说明如何使用 std::vector
从 unsigned char* 缓冲区中获取字符串? -
当原始缓冲区长度为 0 时,您会得到一个空字符串。当您的空性检查不正确时,您会得到一个明显的空字符串。
标签: c++ string packet-capture unsigned-char