初墨墨 2023-02-17 18:51 采纳率: 11.1%
浏览 17

关于QT固定数组的问题

最近在做一个小项目,使用串口进行数据的收发,现在卡在了最开始数据的发送问题上:
现在有一个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的情况。

  • 写回答

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函数将字节数组写入串口。该函数的第一个参数是指向字节数组数据的指针,第二个参数是字节数组的长度。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月17日

悬赏问题

  • ¥25 LT码在高斯信道下的误码率仿真
  • ¥45 渲染完成之后将物体的材质贴图改变,自动化进行这个操作
  • ¥15 yolov5目标检测并显示目标出现的时间或视频帧
  • ¥15 电视版的优酷可以设置电影连续播放吗?
  • ¥50 复现论文;matlab代码编写
  • ¥30 echarts 3d地图怎么实现一进来页面散点数据和卡片一起轮播
  • ¥15 数字图像的降噪滤波增强
  • ¥15 心碎了,为啥我的神经网络训练的时候第二个批次反向传播会报错呀,第一个批次都没有问题
  • ¥15 MSR2680-XS路由器频繁卡顿问题
  • ¥15 VB6可以成功读取的文件,用C#读不了