【问题标题】:QByteArray filled with \x....\x.... to QStringQByteArray 用 \x....\x.... 填充到 QString
【发布时间】:2017-11-04 02:19:08
【问题描述】:

我通过以下方式通过 QByteArray 接收串行数据

QByteArray serialdata = testport->readAll();
qDebug() << serialdata;

qDebug 会溢出类似的东西

...\x00T\xAAN\x82v\xA9k\x7F\xEE\xCEMf\x1C\xAA...

我知道这背后有字符串/字符,但绝对不知道使用什么格式。我搜索了必应和这个板,但没有发现任何线索。更让我困惑的是,这些作品的长度不同。有些是 \x12,有些是 \x123 甚至是 \x1234。

谁能告诉我这是什么编解码器或格式以及我如何将其转换为 QString?

【问题讨论】:

    标签: c++ qt escaping qstring qbytearray


    【解决方案1】:

    \xab表示值为a*16+b的字节,其中ab是十六进制数字。

    \x1234 表示{0x12, '3', '4'}

    \x00T\xAAN\x82v\xA9k\x7F\xEE\xCEMf\x1C\xAA 表示 {0x00, 'T', 0xAA, 'N', 0x82, 'v', 0xA9, 'k', 0x7F, 0xEE, 0xCE, 'M', 'f', 0x1C, 0xAA}。这是一个“字符串”,但绝对不是任何自然人类语言中的字符串,或者至少不是任何常见编码中的字符串。

    这绝对是 不是 ASCII 字符串。看起来更像是线路噪音。很可能您没有将端口上的通信设置设置为与您通信的设备相匹配。

    【讨论】:

    • 谢谢。是否有任何函数可以将像\x00T\xAAN\x82v\xA9k\x7F\xEE\xCEMf\x1C\xAA 这样的 QByteArray 转换为 Unicode QString?
    • 是的。但这取决于编码,您在此处显示的内容看起来不像我所知道的 Unicode 编码,除非数据使用的语言不使用拉丁字母。
    • 隐藏在 QByteArray 中的那些字符串不是自然人类语言,而是所谓的 NMEA0183 句子,例如 !AIVDM,1,1,,B,13aDrb5P1gPOOADs8gw:25kD,0* 32 顺便说一句。
    • NMEA 的句子都是拉丁字母加罗马数字。 IE。它们是ASCII。您显示的数组是not,并且看起来不像 NMEA0183。 qDebug() 将转储 NMEA 语句而不诉诸任何转义。您是否在QSerialPort 上设置了正确的波特率和其他低级协议设置?回想一下,NMEA0183 是 4800bps 或 38400bps,而不是例如9600(大多数串行 I/O 实现的默认值,包括 QSerialPort)。
    • 该死的。试图使它尽可能低并且忘记设置波特率。现在我用 qDebug 得到了清晰的信息。谢谢老兄。你拯救了我的一天!
    猜你喜欢
    • 2012-12-17
    • 2013-12-25
    • 2018-12-22
    • 2016-10-01
    • 2016-11-27
    • 2018-04-14
    • 2016-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多