C++ Qt字符串终止

C++ Qt字符串终止,c++,string,qt,C++,String,Qt,我正在尝试解析qt中的有效负载。 有效负载是一个常量u_char*,我还有它的长度。有效负载可能包含空字符 我想对有效负载执行各种操作,比如查找它是否包含给定的字符串,在它上面使用regex等等,这就是为什么使用QString似乎更容易操作它的原因 所以我尝试了QString s((const char*)负载);但此构造函数不允许字符串中包含空字符 因此,我的问题是: 是否可以创建包含空字符的QString 我应该使用另一个对象而不是QString吗?如果是的话,哪一个(仍然允许在其中搜索并

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

我想对有效负载执行各种操作,比如查找它是否包含给定的字符串,在它上面使用regex等等,这就是为什么使用QString似乎更容易操作它的原因

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

因此,我的问题是:

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

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


谢谢

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


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

QString str = QString::fromUtf8(data, length);
如果要在二进制数据上使用正则表达式,请不要使用
QRegExp
。使用
boost::regex
std::regex
,它们可以很好地处理二进制数据。它们可以在
std::string
上操作(但属于通用),也可以使用类似于上述代码的数据和长度构造函数构造:

string str { data, length };

你想看看QString类文档吗?你确定吗?如果我做QString s=QString::fromUtf8((const char*)有效载荷,size\u有效载荷);我有时仍然会得到size\u有效载荷!=s.size()@jbaw1这是因为UTF-8字符并不总是单字节。正如我所说的:仅当负载实际上是UTF-8时才执行此操作。否则,将
std::regex
std::string
一起使用。