Qt在串口发送完整字节

时间:2014-01-06 09:43:12

标签: c++ qt qbytearray qtserialport

我有这个使用QtSerialPort的简单代码:

char foo[] = {130,50,'\0'};
serial->write(foo);

我的序列中的结果是{2,50}。我认为我可以发送的最大数字是128(字符从-128到128)。发送号码的方式从0到255在哪里?我尝试使用unsigned char但是“write”方法不能使用它。 QByteArray也会出现同样的问题。

谢谢大家。

2 个答案:

答案 0 :(得分:1)

QIODevice接口具有发送的默认字符,可能与编译器有关。有关详细信息,请参阅文档。

  

qint64 QIODevice :: write(const char * data,qint64 maxSize)

     

将最多maxSize字节的数据从数据写入设备。返回实际写入的字节数,如果发生错误,则返回-1。

但是,另一方面,如果您正确地获取数据,则不应该太在意。您仍然可以通过签名发送超过128个值,但它们将作为负值发送,例如0xFF将为-1。

如果你在接收端以相反的顺序采用相同的逻辑,那么应该没有问题。

然而,这似乎与您的问题没有关系,因为您没有获得130的相应负值,但是您将其切换为7位。确保连接是8位数据。

您可以在使用以下代码打开端口后显式设置:

QSerialPort serialPort;
QString serialPortName = "foo";
serialPort.setPortName(serialPortName);

if (!serialPort.open(QIODevice::WriteOnly)) {
    standardOutput << QObject::tr("Failed to open port %1, error: %2").arg(serialPortName).arg(serialPort.errorString()) << endl;
    return 1;
}   

if (!serialPort.setDataBits(QSerialPort::Data8)) {
    standardOutput << QObject::tr("Failed to set 8 data bits for port %1, error: %2").arg(serialPortName).arg(serialPort.errorString()) << endl;
    return 1;
} 

// Other setup code here

char foo[] = {130,50,'\0'};
serialPort.write(foo);

答案 1 :(得分:1)

确保使用QSerialPort::DataBits

将串行端口设置为发送8位

'130'以'2'表示的事实意味着最重要的位被截断。