【发布时间】:2014-07-05 22:57:55
【问题描述】:
我已经使用 ascii 代码样式进行了转换,在我进行 crc 检查之前一切正常。在我的项目中 crc 是一个字节。在我的接收器中,我将所有内容都放入 std::string 中,如果 crc 小于 127,则一切正常。但是,如果我的 crc 大于 127,那么在我的 std::string 中添加额外数据 - 下面的示例。
if crc = 80 -> in std:string "P"
if crc = 168 -> in std::string "�" (three diffrent signs)
我做错了什么?我以为127上面有特殊字符,但现在我迷路了......
编辑: 我试图让它变得简单,但我当然可以给你代码:)。
QSerialPort *serial = new QSerialPort;
std::string *buffer = new std::string;
//when 'readyRead' event comes from serial then:
QString tempBuffer = serial->readAll();
*buffer += tempBuffer.toStdString();
然后在不同的线程中处理缓冲区数据。问题是当我发送一个大于 127 的字节时 - 在这种情况下,一些额外的字符会附加到我的缓冲区(如第一个示例中)。
【问题讨论】:
-
你能显示你的代码吗?不清楚你在写什么。
-
感谢您的更新。您确定您使用的是 8 个数据位而不是 7 个数据位吗? dataBits 属性包含什么?
-
另外,请注意,QIODevice 写入接口是 char,它依赖于编译器。它可以签名也可以不签名。另外,请不要在堆栈上分配 std::string 。此外,甚至不要在这种情况下使用它。只需使用 QByteArray。您正在读取将进行默认转换(latin1?)的 QString,因此,如果您想要 unicode,则必须再次对读取结果进行 fromUtf8 调用,但话又说回来:可以通过删除 std 来消除这种混乱::string 并使用原始 QByteArray。这对解决问题有帮助吗?我还是有点不清楚..
-
好的 - 我发现了我的错误。我从 QByteArray 隐式转换为 QString 并且 QString 做了所有的事情。现在我使用 QByteArray 和返回 char* 的简单方法 data() ,一切正常。 :D 感谢您的帮助。
-
@LaszloPapp "请不要在堆栈上分配 std::string" - 我假设你的意思是 heap?
标签: c++ string qt qbytearray qtserialport