zoukankan      html  css  js  c++  java
  • 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"

  • 相关阅读:
    HDU 5528 Count a * b 欧拉函数
    HDU 5534 Partial Tree 完全背包
    HDU 5536 Chip Factory Trie
    HDU 5510 Bazinga KMP
    HDU 4821 String 字符串哈希
    HDU 4814 Golden Radio Base 模拟
    LA 6538 Dinner Coming Soon DP
    HDU 4781 Assignment For Princess 构造
    LA 7056 Colorful Toy Polya定理
    LA 6540 Fibonacci Tree
  • 原文地址:https://www.cnblogs.com/LCLBook/p/11187181.html
Copyright © 2011-2022 走看看