我正在 QtCreator 中开发一个 Qt/C++ 程序,它使用 QextSerialPort 从/向串口读取和写入。我的程序向 Rhino Mark IV Controller 发送命令,并且必须读取这些命令的响应(以防它们产生任何响应)。我的开发和部署平台是 Windows XP Professional。
当 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 引起的,因为我的程序正确发送(写入)数据,但没有读取正确的字节。
我还尝试使用 super 终端手动与 Mark IV Controller 通信,通信也能正常进行。我使用具有以下参数的 super 终端设置连接:
- 波特率:9600
- 数据位:8
- 校验位:0
- 停止位:1
- 流量控制:硬件
我的程序使用相同的参数设置串口。 super 终端能用,我的程序不行。
我从 qextserialport.sourceforge.net 开始使用 QextSerialPort 1.1然后尝试使用来自 QextSerialPort on Google Code 的最新源代码, 问题依旧。
字符编码错误的原因是什么?
我该怎么做才能解决这个问题?
最佳答案
48 与 -80 对我来说就像是 signed char 与 unsigned char 不匹配。尝试使用显式 unsigned char* 而不是 char*。
关于c++ - QextSerialPort 的字符编码问题 (Qt/C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5484938/