QByteArray详解
Published on 2020-08-26 11:34 in 分类: Qt with 萧海~
分类: Qt

QByteArray详解

  • 1 初始化
    • 2 访问与赋值
      • 3 添加、删除、插入与替换操作
        • 4 查找与比较
          • 5 数据转换与处理
            • 5.1 Hex转换
            • 5.2 数值转换与输出
            • 5.3 字符串数值转为各类数值
            • 5.4 大小写转换

          QByteArray详解(转载)

          QByteArray在串口通讯中经常被使用,有一定必要较为全面详细的对QByteArray进行阐述。本文通过以下几个部分加以介绍:

          1. 初始化

          2. 访问与赋值

          3. 添加、删除、插入与替换操作

          4. 查找与比较

          5. 数据转换与处理

          1 初始化

          2 访问与赋值

              访问QByteArray主要有4中方式,分别为[]、at()、data[]和constData[]。其中[]和data[]为可读可写,at()和constData[]仅为可读。如果仅是读,则通过at()和constData[]访问速度最快,因可避免复制处理。示例如下:

          QByteArray ba;
          ba.resize(6);
          ba[0] = 0x3c;
          ba[1] = 0xb8;
          ba[2] = 0x64;
          ba[3] = 0x18;
          ba[4] = 0xca;
          ba.data()[5] = 0x31;
          qDebug()<<"[]"<<ba[2]; //[] d
          qDebug()<<"at()"<<ba.at(2); //at() d
          qDebug()<<"data()"<<ba.data()[2]; //data() d
          qDebug()<<"constData()"<<ba.constData()[2]; //constData() d
          qDebug()<<"constData()"<<ba.constData()[5]; //constData() 1

          3 添加、删除、插入与替换操作

          4 查找与比较

          5 数据转换与处理

          5.1 Hex转换

              把Hex编码转换为char存储到QByteArray:

          QByteArray text = QByteArray::fromHex("517420697320677265617421");
          text.data(); // returns "Qt is great!"

          把QByteArray转为Hex编码:

          QByteArray ba;
          ba.resize(3);
          ba[0] = 0x30;
          ba[1] = 0x31;
          ba[2] = 0x32;
          qDebug() << ba.toHex(); //return "303132"

          5.2 数值转换与输出

              尽管QByteArray是一个集合,但也可以作为一个特殊形式的数值用,其灵活的转换格式,可大大方便各种格式数据转换与显示的需求。如显示二进制和十六进制、显示科学计数和指定小数位的数值。示例如下:

              把单个字符转为2-36进制数据格式:

          int n = 63;
          qDebug()<<QByteArray::number(n); // returns "63"
          qDebug()<<QByteArray::number(n, 16); // returns "3f"
          qDebug()<<QByteArray::number(n, 16).toUpper(); // returns "3F"
          qDebug()<<QByteArray::number(n, 2); // returns "111111"
          qDebug()<<QByteArray::number(n, 8); // returns "77"

           按照指定进制格式直接复制,其中n可以是各类常见数值类型:

          QByteArray ba;
          int n = 63;
          ba.setNum(n); // ba == "63"
          ba.setNum(n, 16); // ba == "3f"

          把数值按指定格式和小数位转换输出,小数位四舍五入:

          QByteArray ba1 = QByteArray::number(12.3456, 'E', 3);
          QByteArray ba2 = QByteArray::number(12.3456, 'f', 3);
          qDebug()<<ba1; // returns "1.235E+01"
          qDebug()<<ba2; // returns "12.346"

          5.3 字符串数值转为各类数值

              QByteArray若为数值,可通过to**方法转为各种类型数据,示例如下:

          QByteArray strInt("1234");
          bool ok0;
          qDebug() << strInt.toInt(); // return 1234
          qDebug() << strInt.toInt(&ok0,16); // return 4660, 默认把strInt作为16进制的1234,对应十进制数值为4660

          QByteArray string("1234.56");
          bool ok1;
          qDebug() << string.toInt(); // return 0, 小数均视为0
          qDebug() << string.toInt(&ok1,16); // return 0, 小数均视为0
          qDebug() << string.toFloat(); // return 1234.56
          qDebug() << string.toDouble(); // return 1234.56

          QByteArray str("FF");
          bool ok2;
          qDebug() << str.toInt(&ok2, 16); // return 255, ok2 == true
          qDebug() << str.toInt(&ok2, 10); // return 0, ok == false, 转为十进制失败

          5.4 大小写转换

              QByteArray若为带大小写的字符串,可通过toUpper()和toLower()方法实现大小写转换,示例如下:

          QByteArray x("Qt by THE QT COMPANY");
          QByteArray y = x.toLower();
          // y == "qt by the qt company"

          QByteArray z = x.toUpper();
          // z == "QT BY THE QT COMPANY"

          原文链接:https://www.cnblogs.com/LCLBook/p/11187181.html

          posted @   萧海~  阅读(4400)  评论(0编辑  收藏  举报
          编辑推荐:
          · AI与.NET技术实操系列(二):开始使用ML.NET
          · 记一次.NET内存居高不下排查解决与启示
          · 探究高空视频全景AR技术的实现原理
          · 理解Rust引用及其生命周期标识(上)
          · 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
          阅读排行:
          · 全程不用写代码,我用AI程序员写了一个飞机大战
          · DeepSeek 开源周回顾「GitHub 热点速览」
          · 记一次.NET内存居高不下排查解决与启示
          · 物流快递公司核心技术能力-地址解析分单基础技术分享
          · .NET10 - 预览版1新功能体验(一)
          点击右上角即可分享
          微信分享提示
          电磁波切换