2015-01-15 55 views
0

我有一個嵌入式設備,我嘗試通過無線連接通過TCP進行通信。下面是該設備所期望的數據結構:使用QTcpSocket發送字節

char[] = { 0x55, 0x55, 0x55, 0x55 //header block 
    //start data here 
    0x01, 0x00, 0x00, 0x00 //example data 
    //end data block 
    0xAA, 0xAA, 0xAA, 0xAA //footer 
    }; 

我想用QTcpSocket來寫這些數據。 QTcpSocket將允許我寫入char數據或QByteArray,但是當我嘗試以這兩種格式之一保存這些數據時,它會失敗。我能夠成功保存數據的唯一方法是使用unsigned char數組。我的意思

例子:

char message[12] = { 
    0x55, 0x55, 0x55, 0x55, 
    0x01, 0x00, 0x00, 0x00, 
    0xAA, 0xAA, 0xAA, 0xAA}; 

然而,這個消息塊給我一個錯誤

C4309: 'initializing' : truncation of constant value. 

和打印該數據時,它出來的:

U U U U 
r 

與r更像是一個正方形的邊緣比實際字母

此特定問題是由從字符陣列改變爲unsigned char

unsigned char message[12] = { 
    0x55, 0x55, 0x55, 0x55, 
    0x01, 0x00, 0x00, 0x00, 
    0xAA, 0xAA, 0xAA, 0xAA}; 

其打印時再與數據出來固定:

85 85 85 85 
1 0 0 0 
170 170 170 170 

此,該裝置我的格式相匹配正在交談期待。但是,如果我把數據以這種形式,與QTcpSocket不喜歡,並響應回來:

C2664: 'qint64 QIODevice::write(const QByteArray &)': cannot convert argument 1 
from 'unsigned char[20]' to 'const char *' 

有沒有辦法送,我想用在與QTcpSocket數據,或者我需要想出如何使用Windows套接字編寫此消息?

回答

1

你可以簡單地轉換爲char *

qint64 ret = socket.write((char *)message, 12); 
+0

是否有類似的易轉化爲後出現在了與QTcpSocket相同的格式讀取數據? (例如,我在示例中發送了消息,設備將其發送回「驗證」它正確接收了它,我如何讀出它以知道它與我發送的內容相同?) – user3830784 2015-01-15 20:07:38

+1

以類似的方式你可以使用'socket.read((char *)message,12);'這可以在連接到'QTcpSocket'的'readyRead'信號的槽中完成。看到這個異步使用'QTcpSocket'的例子:http://stackoverflow.com/questions/27787130/qt-even-processing-while-waitforconnected-is-running/27793246#27793246 – Nejat 2015-01-15 20:28:10

相關問題