2015-01-15 118 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

相关问题