C++ 使用QSerialPort将带有引号的内容写入串行设备

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函数写入设备。有没有一种方法可以发送包含语音标记的命令?您需

我正在尝试向串行设备写入Lua命令。Lua命令中有引号,这是我的代码无法处理的。该命令是我想要实现的启动序列的一部分。我需要获取“wd=require”word“\r\n”以发送到设备,因此我尝试了以下操作:

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
,它将重新插入反斜杠。