Qt 深受QByteArray的陷害

2021-06-14 05:19:49 字數 823 閱讀 9648

這兩天在維護以前寫的乙個服務端軟體,這軟體使用qt開發的。

除錯了2天,終於找到了答案。原因正是我太相信qt的介面,qbytearray類提供了轉換成char *的介面,可以這麼轉換:

qbytearray arr;

arr.tolatin1().data();

中斷一下,以前在使用arr.toascii().data()的時候也碰到了嚴重的問題。

【qstring和char *的轉換】

bool ccurl::post(const qstring &actionurl, const qstring &fieldsinfo, qstring &htmlstr)

注意,這裡先說明一下curl_easy_setopt函式,該函式設定了表單域,需要乙個char *指標,但curl_easy_setopt函式並沒有真正的拷貝char *資料,只是利用了該指標讀取對應的資料(這裡我經過測試)。所以才會出現curl提交的時候,表單域不完整的bug。

執行成功的**:

bool ccurl::post(const qstring &actionurl, const qstring &fieldsinfo, qstring &htmlstr)

自己申請內容空間儲存這部分內容,當curl提交完成後,再釋放記憶體,這樣就可以保證curl提交表單域正常了。

【總結】:

使用curl,若出現問題,必須要使用curlopt_debugfunction和curlopt_verbose兩個選項。

Qt之QByteArray類學習

qbytearray類提供了位元組陣列,包含於 標頭檔案中,從 q3cstring 類繼承而來。qbytearray可以儲存 raw bytes 和傳統的 8 bits 的字串,都是以 0 結尾的,使用比 char 更方便qstring也可以儲存字串資訊,但通常以 16 bits 形式unicode...

Qt學習系列之有關QByteArray的學習

在 qt中特別常見的一種資料型別,製作串列埠的過程中,關於資料的傳輸,使用到qbytearray比較多,所有有一點使用的心得,分享一下。在串列埠中,接收資料程式如下 qbytearray reciv array global port.readall reciv array的資料型別是qbytear...

QT學習之QByteArray轉QString

方法一 如下 void mainwindow on startbtn clicked qbytearray badlt645frame for i 12 i qbytearray badlt645frametohex badlt645frame.tohex std string badlt645fr...