在 Qt5 中通过 uart 发送一个大缓冲区
Sending a big buffer through uart in Qt5
我是 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);
谁能告诉我怎么做?
您无需为字符串和转换操心。您可以直接从数据本身QByteArray
,用一个简单的一行:
QbyteArray data("\xFF\xFF\xFF\x55\x50\x46\x4D\xAA\x0E", 9);
之后,语句:
myCom->write(data);
然后将输出字符串中指定的九个字节。
这行代码:
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);
哪一个适合你?那么你应该澄清你的背景...
我是 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);
谁能告诉我怎么做?
您无需为字符串和转换操心。您可以直接从数据本身QByteArray
,用一个简单的一行:
QbyteArray data("\xFF\xFF\xFF\x55\x50\x46\x4D\xAA\x0E", 9);
之后,语句:
myCom->write(data);
然后将输出字符串中指定的九个字节。
这行代码:
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);
哪一个适合你?那么你应该澄清你的背景...