c++ - QextSerialPort 的字符编码问题 (Qt/C++)

标签 c++ qt character-encoding serial-port qextserialport

我正在 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/

相关文章:

c++ - 如何在整数的十六进制表示中放置小数点?

C++:Matrix的转置,使用SINGLE DIMENSION动态数组保存元素

c++ - 静态方法可以访问同一类的私有(private)方法吗?

html - 在QT中解析HTML字符串

c++ - C4716 函数必须返回一个值,尽管返回一个值

将二进制转换为多个字符

使用 libiconv 将 UTF-16 转换为 UTF-8

c++ - 返回对象混淆

c++ - 使用 Qt 工具栏和操作释放分配的内存

javascript - Greasemonkey 脚本自动选择并单击值/选择器中包含非英文字符的特定按钮?