在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);
那么谁能告诉我该怎么做?
这行代码:
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("xFFxFFxFFx55x50x46x4DxAAx0E", 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);
哪一个适合您?好吧,你应该澄清你的背景...
你不需要弄乱字符串和转换。您可以直接从数据本身进行QByteArray
,只需简单的单行代码:
QbyteArray data("xFFxFFxFFx55x50x46x4DxAAx0E", 9);
之后,声明:
myCom->write(data);
然后将输出字符串中指定的九个字节。
相关文章:
- 如何使用带有矢量的 winapi 读取进程内存从另一个进程读取缓冲区?
- 绘制一个对象,比较模具缓冲区的两个不同值
- 如果我向一个12字节的缓冲区写入的字节数少于12,会发生什么情况
- 使用迭代器进行合并排序中的一个缓冲区
- 创建一个结构的关联数组,以创建一个缓冲区,供键快速访问
- 创建一个简单的前向迭代器,该迭代器在循环缓冲区的"end"处自动换行
- 我该如何循环遍历我的数组(缓冲区——包含一个文本文件),并将其打印成30字节的块
- 定义一个带有缓冲区的函数作为卤化物中的边界框参数
- window.display() 单独在显示的最后一个缓冲区和当前缓冲区之间切换
- 一个缓冲区如何用新行C++输出
- 在amd64体系结构上的C++中,将图像缓冲区blit到另一个缓冲区的xy偏移中的最快方法
- 如何将一个缓冲区指针的内容复制到另一个缓冲区指针
- 在OpenGL中为顶点、uvs和法线使用一个缓冲区是否比使用三个缓冲区性能更好
- 使用glMapBuffer使用一个缓冲区渲染多个对象
- 为什么当我们从用户那里获得输入时我们需要一个缓冲区
- malloc()是否可以分配一个与使用mmap()分配的另一个缓冲区重叠的缓冲区
- 将jpeg大小从一个缓冲区调整到另一个缓冲区
- cudaHostAllocMapped是否也在设备上分配一个缓冲区?
- ReadFile只读取一个缓冲区字符
- 在c++中声明一个缓冲区数组