上发送完整的字节我有使用QtSerialPort这个简单的代码:Qt的串口
char foo[] = {130,50,'\0'};
serial->write(foo);
结果在我的序列是{2,50}。我认为我可以发送的最大号码是128(char从-128到128)。发送号码从0到255的方式在哪里?我尝试使用无符号字符,但方法“写”不适用于它。 QByteArray也出现同样的问题。
谢谢全部。
上发送完整的字节我有使用QtSerialPort这个简单的代码:Qt的串口
char foo[] = {130,50,'\0'};
serial->write(foo);
结果在我的序列是{2,50}。我认为我可以发送的最大号码是128(char从-128到128)。发送号码从0到255的方式在哪里?我尝试使用无符号字符,但方法“写”不适用于它。 QByteArray也出现同样的问题。
谢谢全部。
QIODevice接口具有用于发送的默认字符,其可能依赖于编译器。详情请参阅文档。
qint64 QIODevice中::写(常量字符*数据,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);
请确保您已设置串口发送8位,使用QSerialPort::DataBits
事实上,“130” “2”意味着最重要的位被截断。
所引用的代码片段没有说明数据是否需要签名,它依赖于编译器处理'char'的方式,而不是签名或未签名。 –
@JoachimPileborg:良好的捕获,修复,谢谢。 – lpapp
我的错误是我假设串行是8位默认值。现在它工作正常。 – Elia