我正在开发QtCreator中的Qt/C++程序,它使用QextSerialPort从串行端口读写数据。我的程序向Rhino Mark IV控制器发送命令,并且必须读取这些命令的响应(以防万一它们产生任何响应)。我的开发和部署平台是Windows XP Professional。QextSerialPort的字符编码问题(Qt/C++)
当Mark IV向命令发送响应并且我的程序从串口缓冲区读取该响应时,数据没有正确编码;我的程序似乎没有得到普通的ASCII数据。例如,当Mark IV发送ASCII“0”(十进制48)后跟一个回车符(十进制13)时,我的缓冲区(char *
)得到-80和13.字符未正确编码,但回车确实。我曾尝试使用read (char *data, qint64 maxSize)
和readAll()
。
我一直监视串行端口的通信使用两个监视器即解释ASCII数据,并显示对应的字符,并以两种方式发送的数据似乎正确编码(它们实际上是正确显示)。鉴于QByteArray
不解释任何字符编码,并且我已经尝试使用read (char *data, qint64 maxSize)
和readAll()
,我已经抛弃了这个问题可能是由Qt引起的。但是,我不确定问题是否由QextSerialPort引起,因为我的程序正确发送(写入)数据,但没有读取正确的字节。
我也尝试过使用超级终端手动与Mark IV控制器通话,并且通信也正确发生。我建立与以下parammeters使用超级终端的连接:
- 波特率:9600
- 数据位:8
- 奇偶校验位:0
- 停止位:1个
- 流控制:硬件
我的程序使用相同的参数设置串口。超级终端的作品,我的程序没有。
我开始使用qextserialport.sourceforge.net的QextSerialPort 1.1,然后尝试使用QextSerialPort on Google Code的最新源代码,问题仍然存在。
什么导致了错误的字符编码?
我需要做些什么来解决这个问题?