我有这个使用 QtSerialPort 的简单代码:
char foo[] = {130,50,'\0'};
serial->write(foo);
我的序列号的结果是 {2, 50}。我认为我可以发送的最大数字是 128(字符从 -128 到 128)。从0到255发送号码的方式在哪里?我尝试使用 unsigned char,但“write”方法不适用于它。 QByteArray 也出现同样的问题。
谢谢大家
最佳答案
QIODevice 接口(interface)具有用于发送的默认字符,这可能取决于编译器。有关详细信息,请参阅文档。
qint64 QIODevice::write(const char * data, qint64 maxSize)
Writes at most maxSize bytes of data from data to the device. Returns the number of bytes that were actually written, or -1 if an error occurred.
但是,另一方面,如果您正确获取数据,则不必太担心。您仍然可以按符号发送大于 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);
关于c++ - Qt 在串口上发送完整的字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20947048/