Qt - C++ - QByteArray与int、float、vector互转

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字节)
// int转QByteArray
int  in = 255;
QByteArray qba_i;

// 转
int li = sizeof(in);
qba_i.resize(li);
memcpy(qba_i.data(), &in, li);

// 将QByteArray转换成vector(vector存放类型需用uint8_t来接存放QByteArray中的元素)
std::vector<uint8_t> vecf(qba_f.begin(), qba_f.begin() + 4);
qInfo()<<veci<<endl;
2.QByteArray转int
// array使用上面的转换后的 qba_i 即可
int  num_int;
memcpy(&num_int, array.data(), sizeof(num_int));
cout<<num_int;

// 等价于
// memcpy(&num_int, array, sizeof(num_int));

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

1.float转QByteArray
// float转QByteArray
float fn = 10000.0;
QByteArray qba_f;

int lf = sizeof(qba_f);
qba_f.resize(lf);
memcpy(qba_f.data(), &fn, lf);

// 将QByteArray转换成vector(vector存放类型需用uint8_t来接存放QByteArray中的元素)
std::vector<uint8_t> vecf(qba_f.begin(), qba_f.begin() + 4);
qInfo()<<vecf<<endl;
2.QByteArray转float
// array使用上面的转换后的 qba_f 即可
float num_float;
memcpy(&num_float, array.data(), sizeof(num_float));
cout<<num_float;

// 等价于
// memcpy(&num_float, qba_f, sizeof(num_float));

三、vector与QByteArray

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

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

至此阅完,欢迎指正~

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值