我有这个使用QtSerialPort的简单代码:
char foo[] = {130,50,'\0'};
serial->write(foo);
我的序列中的结果是{2,50}。我认为我可以发送的最大数字是128(字符从-128到128)。发送号码的方式从0到255在哪里?我尝试使用unsigned char但是“write”方法不能使用它。 QByteArray也会出现同样的问题。
谢谢大家。
答案 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)
'130'以'2'表示的事实意味着最重要的位被截断。