QT中QByteArry陣列和int陣列的相互轉化

2021-08-18 05:07:57 字數 1273 閱讀 9637

本人最近因為專案新學qt,需要在qt上搭建個可以傳送16進製制顯示的二進位制陣列的tcp通訊。以前的開發平台是c#,這種陣列只要用byte陣列就可以,顯示方便。如今轉到c++平台,面對滿是指標的呼叫不知所措。qt中tcp通訊網上就很多了,這裡不再贅述。我們要說的是在:

qbytearry    arry=tcpsoket->readall();

獲得的的是qbytearry陣列,其顯示的是ascii碼形式,而我通訊報文卻又是16進製制資料,如此對比起來比較麻煩。所以需要將獲得的陣列轉換為int型,如此才好對比。

在搜尋了好久之後,並沒有找到乙個直接合適的方法可準確地獲得想要的陣列。於是只能通過中間轉換了。即先將qbytearry轉換成qstring,再將qstring轉成16進製制int陣列,進行比較。我這裡使用了vector,所以需要#include才能呼叫。

qbytearray

da=m_tcpsocket->readall();//獲得陣列

qstring

strmessage=da.tohex();

intlen=strmessage.length();

vector

readm;//因為無法像c#一樣直接定義動態陣列,vector需要一下,這個readm就是我們所需要的int陣列了

for(int

i=0;i2;i++)

而傳送時,將準確的16進製制陣列傳送,就要將int存入qbytearry了,

void

mainwindow::sendmessage()

;//所要傳送的報文

intsiz=sizeof(in)/sizeof(in[0]);

qbytearray

sendm=innitialqbytearry(in,siz);

m_tcpsocket->write(sendm);

}

qbytearray

innitialqbytearry(int

in,int

len)//輸入int陣列和陣列長度,將陣列中的值存入qbytearry中

return

bytearry;

}
東西比較容易,但本人新手,網上能搜尋到的解決方法比較少,所以花了不少時間。希望這個做出來能幫到後來者

Qt中的訊號和槽

訊號槽是qt中特有的概念。它使得程式設計師將不同的object繫結起來,而object物件間並不需要對相互了解。slots也是普通的c 方法,它們可以是virtual 可以被過載 可以使private protected public,可以像其它c 方法一樣有各種型別的引數,signals則無這些屬...

qt中destroyed和close視窗有什麼區別

qt的assistant中關於destroyed只有qobject類的該訊號,其中說的很清楚 物件被destroyed前將立即傳送該訊號,其不能夠被阻塞。該物件的所有子物件在訊號傳送以後會被立即銷毀。而qwidget與qwindow差不多都是釋放視窗相關資源。qwidget的close槽函式是像wi...

Qt中的訊號和槽

目錄 1 概念 2 自定義的訊號和槽 3 自定義的訊號和槽出現過載 4 qstring轉為char 5 lambda表示式 訊號和槽是用於將訊號傳送者與訊號處理者關聯起來 connect 訊號的傳送者,傳送的具體資訊,訊號的結束者,訊號的處理 槽 connect btn3,mypushbutton ...