2014-01-06 24 views
1

上发送完整的字节我有使用QtSerialPort这个简单的代码:Qt的串口

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

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

谢谢全部。

回答

1

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); 
+0

所引用的代码片段没有说明数据是否需要签名,它依赖于编译器处理'char'的方式,而不是签名或未签名。 –

+0

@JoachimPileborg:良好的捕获,修复,谢谢。 – lpapp

+0

我的错误是我假设串行是8位默认值。现在它工作正常。 – Elia

1

请确保您已设置串口发送8位,使用QSerialPort::DataBits

事实上,“130” “2”意味着最重要的位被截断。