繁体   English   中英

Qt字符串终止

[英]Qt string termination

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

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

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

因此,我的问题是:

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

  • 我是否应该使用另一个对象而不是QString,如果是,则使用哪个(仍然可以在其中搜索并将其与正则表达式匹配的对象)?

谢谢

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

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

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

string str { data, length };

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM