1

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

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

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

谢谢你们。

4

2 回答 2

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);
于 2014-01-06T09:46:10.610 回答
1

确保您已使用QSerialPort::DataBits将串行端口设置为发送 8 位

“130”作为“2”出现的事实意味着最高有效位被截断。

于 2014-01-06T09:47:55.837 回答