c++ - 在 Qt5 中通过 uart 发送一个大缓冲区

标签 c++ qt qt5 qstring

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

FFFFFF5550464DAA0E

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

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);

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

最佳答案

这行代码:

QString str=0xFFFFFF5550464DAA0E;

0xFFFFFF5550464DAA0E 不是字符串。您正在尝试将一个非常大的常量(9 字节)数字分配给字符串。请注意,0xFF 不是字符串,而是一个 ASCII 码为 0xFF 的字符。第二次尝试时,您的方法是正确的:

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

现在您有两个选择;这取决于您要发送的内容,9 个字节或更长的字符串,这些命令表示为 十六进制字符串 并编码为 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);

哪一个适合你?那么你应该澄清你的背景......

关于c++ - 在 Qt5 中通过 uart 发送一个大缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28020931/

相关文章:

c++ - "group by"代理模型

python - PyQt5:如何为每个角色设置自定义鼠标指针?

c++ - 如何使用 QPainter 缩放文本以适应边界框?

c++ - UNIX API 调用 : Using read() function to open and print a file to the screen adds extra random characters

c++ - 使用 default 关键字指定的构造函数是否微不足道?

c++ - 在QT中连接到串口

c++ - 为什么在 QtCreator 的 qMake 项目需要 CMake?

c++ - 将二进制流转换为 png 格式

c++ - 在 C++ 中传递函数指针

qt - QListView 可以有不同的垂直和水平间距吗?