QT —— 16进数(HEX)与 QByteArray 的转换

提示:至目前版本 QT (5.14)中,QByteArray 支持的基础数据类型多为 char


前言

QT 对于文件、设备、通讯端口之类的数据交换,采用 QByteArray 类进行,所以在嵌入式开发中经常操作该类以获取或设置数据,本文总结该类的使用。


一、将16进数(HEX)转换为 Char,生成新的 QByteArray

提示:单个字符的标识为:char ch = ‘\xab’;
注意:‘\xff’ 在QT内为16进制原数的合法表述,但其数值对 char 类型来说已经超范围了

1. 采用构造函数生成

    static const char ch0 = '\xab';
    QByteArray byteAry0(&ch0);
    qDebug() << "byte array 0 is:" << byteAry0;		// ret 0xAB

    static const char ch1[] = {'\xff', '\x33', '\x56', '\xab'};
    QByteArray byteAry1(ch1);
    qDebug() << "byte array 1 is:" << byteAry1;		// ret 0xff...

2. 采用系统提供静态函数生成

    static const char ch2[] = {
       '\x00', '\x00', '\x03', '\x84', '\x78', '\x9c', '\x3b', '\x76',
       '\xec', '\x18', '\xc3', '\x31', '\x0a', '\xf1', '\xcc', '\x99',
       '\x6d', '\x5b'
   };
   QByteArray byteAry2 = QByteArray::fromRawData(ch2, sizeof(ch2));
   qDebug() << "byte array 2 is:" << byteAry2;		// ret 0x00 00 03 84..

将基础数据转化为 QByteArray 后,在后续QT的处理中,很少再需要转换回字符串数组进行运算,有时会转换为 qint32 等数值型进行运算。

二、将字符串转化为 QByteArray

1. 采用系统提供的静态函数生成

   QByteArray byteAry3 = QByteArray::fromHex("abccddff");
   qDebug() << "byte array 3 is:" << byteAry3;		// ret 0xAB CC DD..

三、其它类型不能直接生成 QByteArray

1. 其它类型变量可以靠赋值转换

   uint8_t num4 = 0xff;
   static const char ch4 = ~num4 + 1;
   QByteArray byteAry4(&ch4);
   qDebug() << "byte array 4 is:" << byteAry4;		// ret 0x01

   uint16_t num5 = 16;
   static const char ch5 = num5;
   QByteArray byteAry5(&ch5);
   qDebug() << "byte array 5 is:" << byteAry5;		// ret 0x10

赋值所带来的隐形强制类型转换将被体现出来

2. 直接赋值转换

   static const char ch6 = 250;
   QByteArray byteAry6(&ch6);
   qDebug() << "byte array 6 is:" << byteAry6;		// ret 0xFA

数值将能够超过 char 类型本身所代表的 -127 to 128 限制,直接以16进制原始状态写入内存

3. 依靠指针转换

借助强制类型转换符 reinterpret_caset 也可以用指针转换的方式将数值转为 char* 类型后,再送入 QByteArray 对象,其中 reinterpret 原型如下: reinterpret_cast (expression)
但该方式用起来并不方便,在测试后并不推荐该方式,也将不做记录。

总结

后续进一步总结。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值