Qt字符串终止

时间:2014-11-27 21:51:08

标签: c++ string qt

我正在尝试解析qt中的有效负载。 有效载荷是一个const u_char *,我也有它的长度。有效负载可能包含空字符。

我想对有效负载执行各种操作,例如查找它是否包含给定字符串,使用正则表达式等,这就是为什么使用QString似乎更容易操作它。

所以我尝试了QString s((const char *)payload);但是这个构造函数不允许字符串中的空字符。

因此我的问题是:

  • 是否可以创建包含空字符的QString?

  • 我应该使用另一个对象而不是QString,如果是,那么哪一个(仍允许在其中搜索并将其与正则表达式匹配?

由于

2 个答案:

答案 0 :(得分:1)

如果您想在Qt5中使用QRegExp(或QRegularExpression),则需要使用QString。要从原始字节构造QString,您需要指定字符编码来执行此操作。如果您的有效负载带有 UTF-8文本,请使用QString::fromUtf8,它也需要一个大小参数。然后,数据也可能包含一个空字符,它将成为字符串的一部分,而不是终止它:

QString str = QString::fromUtf8(data, length);

如果您想在二进制数据上使用正则表达式,请不要使用QRegExp。使用boost::regexstd::regex代替,它们可以很好地处理二进制数据。它们可以在std::string上运行(但是通用的),也可以使用类似于上面代码的数据和长度构造函数构造:

string str { data, length };

答案 1 :(得分:0)

我建议使用std::stringstream,此对象可以包含空字符并执行许多不同的操作。

http://www.cplusplus.com/reference/sstream/stringstream/stringstream/