当前位置: 首页 > 网络知识

Qt QByteArray与int、float、vector互转

时间:2026-01-29 09:26:55

  QByteArray的转换一般在串口通信中常用,将int、float、double转换为4个字节的数组(如255 > [0,0,0,255],本文章一律用10进制表示),或将4个字节的数组转换为int、float、double(如[0,0,0,255] > 255)。在QT界面中的使用流程,笔者总结为以下思路:

从上位机发送一帧指令到串口(封包、根据具体协议组装指令)
1.先将QString转int、float、double
2.再将int、float、double转QByteArray(例如参数qba)
3.最后将qba放到一帧数据中的数据位(需区分数据大小端,也就是[0,0,0,255] 和[255,0,0,0] )

从下位机接收一帧指令(解包、根据具体协议解析指令)
  通常是将数据位的4个字节的数组逆向转换成对应的int、float、double数据。

一、 int与QByteArray
1.int转QByteArray(4字节)

1 // int转QByteArray 2 int in = 255; 3 QByteArray qba_i; 4 5 // 转 6 int li = sizeof(in); 7 qba_i.resize(li); 8 memcpy(qba_i.data(), &in, li); 9 10 // 将QByteArray转换成vector(vector存放类型需用uint8_t来接存放QByteArray中的元素) 11 std::vector<uint8_t> vecf(qba_f.begin(), qba_f.begin() + 4); 12 qInfo()<<veci<<endl;

2.QByteArray转int

1 // array使用上面的转换后的 qba_i 即可 2 int num_int; 3 memcpy(&num_int, array.data(), sizeof(num_int)); 4 cout<<num_int; 5 6 // 等价于 7 // memcpy(&num_int, array, sizeof(num_int));

二、float与QByteArray(4字节,符合IEE754转16进制标准)

1.float转QByteArray
1 // float转QByteArray 2 float fn = 10000.0; 3 QByteArray qba_f; 4 5 int lf = sizeof(qba_f); 6 qba_f.resize(lf); 7 memcpy(qba_f.data(), &fn, lf); 8 9 // 将QByteArray转换成vector(vector存放类型需用uint8_t来接存放QByteArray中的元素) 10 std::vector<uint8_t> vecf(qba_f.begin(), qba_f.begin() + 4); 11 qInfo()<<vecf<<endl;

2.QByteArray转float

1 // array使用上面的转换后的 qba_f 即可 2 float num_float; 3 memcpy(&num_float, array.data(), sizeof(num_float)); 4 cout<<num_float; 5 6 // 等价于 7 // memcpy(&num_float, qba_f, sizeof(num_float));

三、vector与QByteArray

1.QByteArray转vector
1 // 将QByteArray转换成vector(vector存放类型需用uint8_t来接存放QByteArray中的元素) 2 std::vector<uint8_t> vecf(qba_f.begin(), qba_f.begin() + 4);
2.vector转QByteArray

直接将vector遍历元素,append()到QByteArray中即可。
后续有其他更优的方法再更新~



上一篇:Qt 报错: QWidget: Must construct a QApplication before a QWidget
下一篇:Qt qrc资源文件介绍与使用
Qt
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器
  • 英特尔第五代 Xeon CPU 来了:详细信息和行业反应
  • 由于云计算放缓引发扩张担忧,甲骨文股价暴跌
  • Web开发状况报告详细介绍可组合架构的优点
  • 如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳
  • 美光在数据中心需求增长后给出了强有力的预测
  • 2027服务器市场价值将接近1960亿美元
  • 生成式人工智能的下一步是什么?
  • 分享在外部存储上安装Ubuntu的5种方法技巧
  • 全球数据中心发展的关键考虑因素
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器

    英特尔第五代 Xeon CPU 来了:详细信息和行业反应

    由于云计算放缓引发扩张担忧,甲骨文股价暴跌

    Web开发状况报告详细介绍可组合架构的优点

    如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳

    美光在数据中心需求增长后给出了强有力的预测

    2027服务器市场价值将接近1960亿美元

    生成式人工智能的下一步是什么?

    分享在外部存储上安装Ubuntu的5种方法技巧

    全球数据中心发展的关键考虑因素