簡體   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