C++ 使用QSerialPort将带有引号的内容写入串行设备
我正在尝试向串行设备写入Lua命令。Lua命令中有引号,这是我的代码无法处理的。该命令是我想要实现的启动序列的一部分。我需要获取“wd=require”word“\r\n”以发送到设备,因此我尝试了以下操作:C++ 使用QSerialPort将带有引号的内容写入串行设备,c++,qt,serial-port,qbytearray,C++,Qt,Serial Port,Qbytearray,我正在尝试向串行设备写入Lua命令。Lua命令中有引号,这是我的代码无法处理的。该命令是我想要实现的启动序列的一部分。我需要获取“wd=require”word“\r\n”以发送到设备,因此我尝试了以下操作: QByteArray const CMD_ALPHA=“wd=require\'word\”\r\n 但它保留了斜杠。如果没有斜杠,则代码无法编译。 CMD_ALPHA被传递给队列函数,然后使用QSerialPort中的write函数写入设备。有没有一种方法可以发送包含语音标记的命令?您需
QByteArray const CMD_ALPHA=“wd=require\'word\”\r\n代码>
但它保留了斜杠。如果没有斜杠,则代码无法编译。
CMD_ALPHA被传递给队列函数,然后使用QSerialPort中的write函数写入设备。有没有一种方法可以发送包含语音标记的命令?您需要知道的主要问题是:您编写的CMD\u ALPHA
数组不包含任何值与\
字符相对应的所有字符。
下面描述的字节数组只包含一个值。
此单个值对应于“
符号。
其大小等于一:
QByteArray baWithQuoteSymbolOnly = "\"";
看到\
字符的原因是您的输出工具(调试器输出、终端等)决定显示数组中的所有符号+以“不可打印”的方式表示多个符号。
例如,\n
符号输出的可打印方式是换行,而不是\n
运行下面的代码以更好地理解
#include <QtCore/QCoreApplication>
#include <QByteArray>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
/*
The byte array below contains only 1 symbol "
It does not contain \ symbols at all.
Its size is equal to one.
*/
QByteArray baWithQuoteSymbolOnly = "\"";
qDebug() << baWithQuoteSymbolOnly.size();
/*
But it can be printed with quotation characters
and with escaping of non-printable characters
*/
qDebug() << baWithQuoteSymbolOnly;
/*
You can print it WITHOUT quotation characters
and WITHOUT escaping of non-printable characters
*/
qDebug().noquote() << baWithQuoteSymbolOnly;
QByteArray const CMD_ALPHA = "wd = require \"word\" \r\n";
qDebug() << CMD_ALPHA;
qDebug().noquote() << CMD_ALPHA;
// output every element that CMD_ALPHA array actually contains
for (int i=0; i<CMD_ALPHA.size(); i++)
{
char asciiSymbol = CMD_ALPHA.at(i);
int value = CMD_ALPHA.at(i);
qDebug().noquote() << "ascii symbol =" << asciiSymbol << "value in hex =" << QString::number(value, 16);
}
// Now see what ASCII code does backslash symbol really have
char realBackslash = '\\';
qDebug().noquote() << "backslash symbol =" << realBackslash
<< "value in hex =" << QString::number(realBackslash, 16);
return a.exec();
}
#包括
#包括
#包括
int main(int argc,char*argv[])
{
qcorea应用程序(argc、argv);
/*
下面的字节数组仅包含1个符号“
它根本不包含\符号。
它的大小等于一。
*/
QByteArray baWithQuoteSymbolOnly=“\”;
qDebug()您是如何确定它“保留了斜杠的”?@Botje让设备回显我正在发送的内容。它完全回显上面的内容,带有斜杠。您是如何将其发送到设备的?如果调用toString
,它将重新插入反斜杠。