Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QByteArray中填充了\x…\x。。。。扭动_C++_Qt_Escaping_Qstring_Qbytearray - Fatal编程技术网

C++ QByteArray中填充了\x…\x。。。。扭动

C++ QByteArray中填充了\x…\x。。。。扭动,c++,qt,escaping,qstring,qbytearray,C++,Qt,Escaping,Qstring,Qbytearray,我通过QByteArray以以下方式接收串行数据 QByteArray serialdata = testport->readAll(); qDebug() << serialdata; QByteArray serialdata=testport->readAll(); qDebug()qDebug对数组进行格式化,以使其能够安全显示,即将显示格式转换为C字符串文字的格式,其中非ASCII可打印字符被转义并表示为十六进制八位字节 即,\xab表示值为a*16+b的字节,其中

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

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

qDebug()
qDebug
对数组进行格式化,以使其能够安全显示,即将显示格式转换为C字符串文字的格式,其中非ASCII可打印字符被转义并表示为十六进制八位字节

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

\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字符串。看起来更像线噪音。很可能您没有将端口上的通信设置设置为与您通信的设备的设置相匹配。

thx。是否有任何函数可以将类似
\x00T\xAAN\x82v\xA9k\x7F\xEE\xcef\x1C\xAA
的QByteArray转换为Unicode QString?是的。但这取决于编码,这里显示的似乎不是我所知道的Unicode编码,除非数据使用的是一种不使用拉丁字母的语言。隐藏在QByteArray中的那些字符串不是自然的人类语言,因此被称为NMEA0183语句,如!AIVDM,1,1,B,13aDrb5P1gPOOADs8gw:25kD,0*32顺便说一下。NMEA的句子都是拉丁字母和罗马数字。也就是说,它们是ASCII码。您显示的数组不是,看起来也不像NMEA0183
qDebug()
将在不使用任何转义的情况下转储NMEA语句。您是否在
QSerialPort
上设置了正确的波特率和其他低级协议设置?回想一下,NMEA0183是4800bps或38400bps,而不是9600(大多数串行I/O实现的默认值,包括
QSerialPort
)。该死。试图将此设置为尽可能低的级别,但忘记设置波特率。现在我通过qDebug获得了清晰的信息。泰克斯兄弟。你救了我一天!