最近在做一个小项目,使用串口进行数据的收发,现在卡在了最开始数据的发送问题上:
现在有一个55个字节的十六进制数据,(eg:55 AA 37 40 0C 11 30 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 AA 55 ),我需要把这数据通过串口发出去:port->write(byte)
现在的问题是字节较长,使用串口发数据时时间久会出现堵塞问题,因此考虑了多线程问题,就像把这些数据放在子线程中,因为不想写成byte[0]=ox55;这样的形式进行挨个赋值,所以考虑到了数组,但是这些数据是固定的,对于QVector容器上也需要挨个赋值,就很麻烦,所以各位朋友有没有别的方法可以定义这些数据,并能不堵塞长久使用,界面不会出现假si的情况。
关于QT固定数组的问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 程序员星辰 2023-02-17 19:28关注
你可以将十六进制数据先转换为一个字节数组,然后将该字节数组直接写入串口,这样可以避免使用循环挨个赋值的方法,也可以减少堵塞时间,提高传输效率。
以下是一个简单的示例代码,展示了如何将十六进制数据转换为字节数组并写入串口:
// 十六进制数据字符串 std::string hex_data = "55AA37400C1130000000010000000000000000000000000000000000000000000000000000000000AA55"; // 将十六进制字符串转换为字节数组 std::vector<uint8_t> byte_array; for (std::size_t i = 0; i < hex_data.length(); i += 2) { std::string byte_str = hex_data.substr(i, 2); uint8_t byte = std::stoi(byte_str, nullptr, 16); byte_array.push_back(byte); } // 将字节数组写入串口 port->write(byte_array.data(), byte_array.size());
在这个示例代码中,首先定义了一个包含十六进制数据的字符串hex_data。然后使用循环将该字符串转换为一个字节数组byte_array,其中std::stoi函数可以将十六进制字符串转换为十进制数字,uint8_t表示无符号8位整型。
最后使用串口的write函数将字节数组写入串口。该函数的第一个参数是指向字节数组数据的指针,第二个参数是字节数组的长度。
解决 无用评论 打赏 举报
悬赏问题
- ¥25 LT码在高斯信道下的误码率仿真
- ¥45 渲染完成之后将物体的材质贴图改变,自动化进行这个操作
- ¥15 yolov5目标检测并显示目标出现的时间或视频帧
- ¥15 电视版的优酷可以设置电影连续播放吗?
- ¥50 复现论文;matlab代码编写
- ¥30 echarts 3d地图怎么实现一进来页面散点数据和卡片一起轮播
- ¥15 数字图像的降噪滤波增强
- ¥15 心碎了,为啥我的神经网络训练的时候第二个批次反向传播会报错呀,第一个批次都没有问题
- ¥15 MSR2680-XS路由器频繁卡顿问题
- ¥15 VB6可以成功读取的文件,用C#读不了