【问题标题】:Sending a big buffer through uart in Qt5在 Qt5 中通过 uart 发送一个大缓冲区
【发布时间】:2015-01-19 08:58:27
【问题描述】:

我是 Qt 的初学者。现在我想用Qt5通过uart发送一个9字节的命令。 这是我的命令:

FFFFFF5550464DAA0E

我想将我的命令传输到一个 Qstring 对象。当我这样写代码时,它告诉我 const 太大了。

QString str=0xFFFFFF5550464DAA0E;

所以我选择了这样一个数组,但是还是不行。

char cmd[9]={0xFF,0xFF,0xFF,0x55,0x50,0x46,0x4D,0xAA,0x0E};
for(int i=0;i<9;i++)
{
    QString str=cmd[i];
    QByteArray outData=str.toLatin1();
    int size=outData.size();
    outData=myHelper::HexStrToByteArray(str);
    size=outData.size();
    myCom->write(outData);
}

我也试试这个,又失败了

char cmd[9]={0xFF,0xFF,0xFF,0x55,0x50,0x46,0x4D,0xAA,0x0E};
QString str=cmd;
QByteArray outData=str.toLatin1();
int size=outData.size();
outData=myHelper::HexStrToByteArray(str);
size=outData.size();
myCom->write(outData);

那么谁能告诉我该怎么做?

【问题讨论】:

  • 你知道0xFF"0xFF"的区别吗?
  • 感谢@paxdiablo 的帮助,现在它可以工作了。我真的很感激
  • 感谢您的努力@Adriano Repetti,我认为您的回答可以帮助初学者很多
  • @ctxrr 欢迎您,希望对您有所帮助。小提示:在未来的 SO 问题中尝试发布更多关于 context 的信息(例如,您希望通过 wirte 发送的确切数据),它可能会减少对几行代码的回答(无需 猜测) ;)
  • @Adriano Repetti 好的,我会的。谢谢你的推荐。我不仅是 Qt 的初学者,也是堆栈溢出的新手。

标签: c++ qt qt5 qstring


【解决方案1】:

这行代码:

QString str=0xFFFFFF5550464DAA0E;

0xFFFFFF5550464DAA0E 不是字符串。您正在尝试将一个非常大的常量(9 个字节)数字分配给字符串。请注意,0xFF 不是字符串,而是带有 ASCII 码 0xFF 的字符。通过您的第二次尝试,您就走在了正确的道路上:

char cmd[9]={0xFF,0xFF,0xFF,0x55,0x50,0x46,0x4D,0xAA,0x0E};

现在你有两个选择;这取决于您必须发送的内容,9 个字节或更长的字符串,该命令表示为 hex 字符串 并编码为 ASCII。第一种情况更简单,删除所有代码:

QByteArray outData = QByteArray(cmd, sizeof(cmd));
myCom->write(outData);

使用此代码,您不会向设备发送字符串,而是发送 9 个字节 (0xFF...0x0E)。如果您必须发送一个字符串,那么您可以按照 paxdiablo 的建议进行操作:

QByteArray outData = QByteArray("\xFF\xFF\xFF\x55\x50\x46\x4D\xAA\x0E", 9);
myCom->write(outData);

或者:

QByteArray outData = QString("0xFF0xFF0xFF0x550x500x460x4D0xAA0x0E")
    .toLatin1();
myCom->write(outData);

或者你也可以这样做:

char cmd[9]={0xFF,0xFF,0xFF,0x55,0x50,0x46,0x4D,0xAA,0x0E};
QByteArray outData = QByteArray(cmd, sizeof(cmd)).toHex();
myCom->write(outData);

哪一个适合你?那么你应该澄清你的上下文......

【讨论】:

    【解决方案2】:

    您无需处理字符串和转换。您可以直接从数据本身制作QByteArray ,使用简单的单行:

    QbyteArray data("\xFF\xFF\xFF\x55\x50\x46\x4D\xAA\x0E", 9);
    

    接着,声明:

    myCom->write(data);
    

    然后将输出字符串中指定的九个字节。

    【讨论】:

    • 我不认为这是问题所在,因为它(几乎)与 OP 已经做的一样。问题似乎在于转换为 QString。
    • 我说的是没有需要把它转成字符串,直接创建字节数组即可。
    • 啊,好吧...没听懂
    猜你喜欢
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    相关资源
    最近更新 更多