[英]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::regex
或std::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.