当前位置: 首页 > article >正文

Qt5.12实战之QByteArray与字符指针及字符串转换

示例源码:

#include <QCoreApplication>
#include <QDebug>
#include <QTextStream>
static QTextStream cout (stdout,QIODevice::WriteOnly);
#include <iostream>
#include <QtGlobal>
#include <QByteArray>

void test()
{
    qDebug() << "HelloWorld-qdebug";
    cout << "Helloword-QTextStream" <<endl;
    std::cout<<"Helloword-std::cout"<<std::endl;
}

void test_types()
{
    qint8 signed_char_type;//signed char 有符号8bit
    qint16 signed_short_type;//signed short 有符号16bit
    qint32 signed_int_type;//signed int 有符号32bit
    qint64 signed_long_long_int_type;//signed long long int 有符号64bit

    qDebug() <<"sizeof(qint8)="  <<sizeof (signed_char_type)
             <<"sizeof(qint16)=" <<sizeof (signed_short_type)
             <<"sizeof(qint32)=" <<sizeof(signed_int_type)
             <<"sizeof(qint64)=" <<sizeof (signed_long_long_int_type)<<endl;;

    qptrdiff qint32_or_qint64_type;//32位系统 qint32 64位系统 qint64
    qreal double_or_float_type;//默认是double,如果加上-qreal float选项,那么是float
    qintptr same_as_qptrdiff;//32位系统 qint32 64位系统 qint64
    quintptr quint32_or_quint64_type;//32位系统 quint32 64位系统 quint64
    qDebug() <<"sizeof(qptrdiff)="  <<sizeof (qint32_or_qint64_type)
             <<"sizeof(qreal)=" <<sizeof (double_or_float_type)
             <<"sizeof(qintptr)=" <<sizeof(same_as_qptrdiff)
             <<"sizeof(quintptr)=" <<sizeof (quint32_or_quint64_type)<<endl;

    quint8 unsigned_char_type;//unsigned char 无符号8bit
    quint16 unsigned_short_type;//unsigned short 无符号16bit
    quint32 unsigned_int_type;//unsigned int 无符号32bit
    quint64 unsigned_long_long_int_type;//unsigned long long int 无符号64bit
    qDebug() <<"sizeof(quint8)="  <<sizeof (unsigned_char_type)
             <<"sizeof(quint16)=" <<sizeof (unsigned_short_type)
             <<"sizeof(quint32)=" <<sizeof(unsigned_int_type)
             <<"sizeof(quint64)=" <<sizeof (unsigned_long_long_int_type)<<endl;

    qlonglong same_as_qint64_type;//相当于qint64
    qulonglong same_as_quint64_type;//相当于quint64
    qDebug() <<"sizeof(qlonglong)="  <<sizeof (same_as_qint64_type)
             <<"sizeof(qulonglong)=" <<sizeof (same_as_quint64_type)<<endl;

    uchar unsigned_char_type_same_quint8;//unsigned char 无符号8bit
    ushort unsigned_short_type_same_quint16;//unsigned short 无符号16bit
    uint unsigned_int_type_same_quint32;//unsigned int 无符号32bit
    ulong unsigned_long_type;//unsigned long 无符号32bit
    qDebug() <<"sizeof(uchar)="  <<sizeof (unsigned_char_type_same_quint8)
             <<"sizeof(ushort)=" <<sizeof (unsigned_short_type_same_quint16)
             <<"sizeof(uint)=" <<sizeof(unsigned_int_type_same_quint32)
             <<"sizeof(ulong)=" <<sizeof (unsigned_long_type)<<endl;

}



void test_qbytearray()
{
    QByteArray bArray("Hello QByteArray"); // '\0'
    int len = bArray.length();
    char cLast = bArray[17];
    qDebug()<<"string len:"
            <<len
            <<"last char:"
            <<cLast
           <<endl;
}

void test_qbytearray_resize()
{
    QByteArray ba;
    ba.resize(3);
    ba[0]=0x3c;
    ba[1]=0xb8;
    ba[2]=0x64;
    qDebug()<<endl<<"ba length:"<<ba.length()<<endl;
}

void test_qbytearray_fill()
{
    QByteArray ba("hello");
    qDebug()<<"ba before fill:"<<ba<<endl;
    ba.fill('K');
    qDebug()<<"ba after fill:"<<ba<<endl;
    ba.fill('K',2);
    qDebug()<<"ba after fill two char:"<<ba<<endl;
    ba.fill('Q',10);
    qDebug()<<"ba after fill ten char Q:"<<ba
           <<"qbytearray length:"<<ba.length()
           <<"sizeof(ba)="<<sizeof (ba)<<endl //ba is a point of QByteArray
           <<"sizeof(QByteArray[])="<<sizeof ( (char)ba[1])<<endl;
    ba.data()[7]='A';
    qDebug()<<ba.at(4)<<ba.data()[5]<<ba.constData()[7]<<endl;
}

void test_qbytearray_right_left_mid()
{
    QByteArray ba("HelloWorld2023");
    qDebug()<<ba.left(5);
    qDebug()<<ba.right(4);
    qDebug()<<ba.mid(5,5);
}

void test_qbytearray_size()
{
    QByteArray ba("HelloWorld");
    qDebug()<<ba.length();
    qDebug()<<ba.size();
    qDebug()<<ba.count();
    QByteArray ba1("He\0llo");
    qDebug()<<ba1.length();
}

void test_datatype_convert()
{
    QByteArray ba("HelloWorld");
    QByteArray ba_hex =  ba.toHex();
    qDebug() << "HelloWorld to Hex: "<<ba_hex<<endl; //48656c6c6f576f726c64

    QByteArray ba_fromhex = QByteArray::fromHex("48656c6c6f576f726c64");
    qDebug() << "QByteArray from Hex: "<<ba_fromhex<<endl;

    int digit = 255;
    uint u_digit = 255u;
    qlonglong qll_digit = 255ll;
    qulonglong qull_digit = 255ull;
    qDebug()<<"number base 10 on int :"<< QByteArray::number(digit);
    qDebug()<<"number base 10 on uint :"<<QByteArray::number(u_digit);
    qDebug()<<"number base 10 on qlonglong :"<<QByteArray::number(qll_digit);
    qDebug()<<"number base 10 on qulonglong :"<<QByteArray::number(qull_digit);

    qDebug()<<"number base 10 on int :"<< QByteArray::number(78);
    qDebug()<<"number base 10 on uint :"<<QByteArray::number(78u);
    qDebug()<<"number base 10 on qlonglong :"<<QByteArray::number(78ll);
    qDebug()<<"number base 10 on qulonglong :"<<QByteArray::number(78ull);

    qDebug()<<"number base 10 on int :"<< QByteArray::number(digit,16);
    qDebug()<<"number base 10 on uint :"<<QByteArray::number(u_digit,16);
    qDebug()<<"number base 10 on qlonglong :"<<QByteArray::number(qll_digit,16);
    qDebug()<<"number base 10 on qulonglong :"<<QByteArray::number(qull_digit,16);

    qDebug()<<"number base 10 on int :"<< QByteArray::number(digit,8);
    qDebug()<<"number base 10 on uint :"<<QByteArray::number(u_digit,8);
    qDebug()<<"number base 10 on qlonglong :"<<QByteArray::number(qll_digit,8);
    qDebug()<<"number base 10 on qulonglong :"<<QByteArray::number(qull_digit,8);

    qDebug()<<"number base 10 on int :"<< QByteArray::number(digit,2);
    qDebug()<<"number base 10 on uint :"<<QByteArray::number(u_digit,2);
    qDebug()<<"number base 10 on qlonglong :"<<QByteArray::number(qll_digit,2);
    qDebug()<<"number base 10 on qulonglong :"<<QByteArray::number(qull_digit,2);

    QByteArray num;
    qDebug()<<"QByteArray::setNum base 10 on int :"<< num.setNum(digit);
    qDebug()<<"QByteArray::setNum base 10 on uint :"<<num.setNum(u_digit);
    qDebug()<<"QByteArray::setNum base 10 on qlonglong :"<<num.setNum(qll_digit);
    qDebug()<<"QByteArray::setNum base 10 on qulonglong :"<<num.setNum(qull_digit);

    qDebug()<<"QByteArray::setNum base 10 on int :"<< num.setNum(digit,16);
    qDebug()<<"QByteArray::setNum base 10 on uint :"<<num.setNum(u_digit,16);
    qDebug()<<"QByteArray::setNum base 10 on qlonglong :"<<num.setNum(qll_digit,16);
    qDebug()<<"QByteArray::setNum base 10 on qulonglong :"<<num.setNum(qull_digit,16);

    qDebug()<<"QByteArray::setNum base 10 on int :"<< num.setNum(digit,8);
    qDebug()<<"QByteArray::setNum base 10 on uint :"<<num.setNum(u_digit,8);
    qDebug()<<"QByteArray::setNum base 10 on qlonglong :"<<num.setNum(qll_digit,8);
    qDebug()<<"QByteArray::setNum base 10 on qulonglong :"<<num.setNum(qull_digit,8);

    qDebug()<<"QByteArray::setNum base 10 on int :"<< num.setNum(digit,2);
    qDebug()<<"QByteArray::setNum base 10 on uint :"<<num.setNum(u_digit,2);
    qDebug()<<"QByteArray::setNum base 10 on qlonglong :"<<num.setNum(qll_digit,2);
    qDebug()<<"QByteArray::setNum base 10 on qulonglong :"<<num.setNum(qull_digit,2);

    double dbNum=12345.66;
    qDebug()<<"number base 10 on double of e format(prec=6) :"<< QByteArray::number(dbNum,'e');
    qDebug()<<"number base 10 on double of e format(prec=3) :"<< QByteArray::number(dbNum,'e',3);
    qDebug()<<"number base 10 on double of E format(prec=6) :"<< QByteArray::number(dbNum,'E');
    qDebug()<<"number base 10 on double of e format(prec=3) :"<< QByteArray::number(dbNum,'E',3);
    qDebug()<<"number base 10 on double of f format(prec=6) :"<< QByteArray::number(dbNum,'f');
    qDebug()<<"number base 10 on double of f format(prec=3) :"<< QByteArray::number(dbNum,'f',3);
    qDebug()<<"number base 10 on double of f format(prec=3) :"<< QByteArray::number(dbNum,'f',1);
    qDebug()<<"number base 10 on double of g format(prec=6) :"<< QByteArray::number(dbNum,'g');
    qDebug()<<"number base 10 on double of g format(prec=3) :"<< QByteArray::number(dbNum,'g',3);
    qDebug()<<"number base 10 on double of G format(prec=6) :"<< QByteArray::number(dbNum,'G');
    qDebug()<<"number base 10 on double of G format(prec=3) :"<< QByteArray::number(dbNum,'G',3);

    QByteArray abc="HelloWorld";
    qDebug()<<"HelloWorld ->toLower() : "<<abc.toLower();
    qDebug()<<"HelloWorld ->toUpper() : "<<abc.toUpper();

    QByteArray strNum="-123456";
    QByteArray strNumU="123456";
    qDebug()<<"strNum ->toInt() : "<<strNum.toInt();
    qDebug()<<"strNum ->toUInt() : "<<strNumU.toUInt();


    bool isBase=false;
    QByteArray strDigit="255";
    QByteArray strBin="11111111";
    qDebug()<<"digit ->toInt() base on 10 : "<<strDigit.toInt(&isBase)<<",isBase:"<<isBase;
    qDebug()<<"digit ->toInt() base on 16 : "<<strDigit.toInt(&isBase,16)<<",isBase:"<<isBase;
    qDebug()<<"digit ->toInt() base on 8 : "<<strDigit.toInt(&isBase,8)<<",isBase:"<<isBase;
    qDebug()<<"digit ->toInt() base on 2 : "<<strBin.toInt(&isBase,2)<<",isBase:"<<isBase;

    QByteArray strDouble="3.14159";
    qDebug()<<"strDouble ->toDouble() : "<<strDouble.toDouble(&isBase)<<",isBase:"<<isBase;
    qDebug()<<"strDouble ->toFloat() : "<<strDouble.toFloat(&isBase)<<",isBase:"<<isBase;
    qDebug()<<QByteArray::number(strDouble.toDouble());
    qDebug()<<QByteArray::number(strDouble.toDouble(),'g');
    qDebug()<<QByteArray::number(strDouble.toDouble(),'g',3);
    qDebug()<<QByteArray::number(strDouble.toDouble(),'G');
    qDebug()<<QByteArray::number(strDouble.toDouble(),'G',3);
    qDebug()<<QByteArray::number(strDouble.toDouble(),'f');
    qDebug()<<QByteArray::number(strDouble.toDouble(),'f',3);
    qDebug()<<QByteArray::number(strDouble.toDouble(),'e');
    qDebug()<<QByteArray::number(strDouble.toDouble(),'e',3);
    qDebug()<<QByteArray::number(strDouble.toDouble(),'E');
    qDebug()<<QByteArray::number(strDouble.toDouble(),'E',3);
}

typedef struct User{
    int id;
    std::string name;
}USER;

void test_qbytearray_charpoint_std_string_qstring()
{
    USER u;
    u.id=1001;
    u.name="hello";

    QByteArray arr;
    arr.append((char*)&u,sizeof (u));

    USER *pUser = (USER*)arr.data();
    qDebug() <<pUser->id<<pUser->name.c_str();

    QByteArray ba("HelloWorld");
    char *pBa = ba.data();
    qDebug() << pBa;
    qDebug() << *pBa;
    while (*pBa) {
        qDebug()<< "item of Array : " << *pBa;
        ++pBa;
    }
    char *p = &ba.data()[5];
    qDebug() <<p;

    std::string str = ba.toStdString();
    qDebug()<<"std::string ->"<<str.c_str();

    QByteArray baStd = QByteArray::fromStdString(std::string("this is a std string"));
    qDebug()<<"fromStdString ->"<<baStd;

    QString qstr = QString("HelloWorld");
    qDebug()<<"QString to QByteArray ->"<<qstr.toLatin1();
    QByteArray tmpBa = "flkdsjlkfjkdsjfldsjkfjk";
    qstr=tmpBa;
    qDebug()<<qstr;

    if(tmpBa.isEmpty())
    {
        qDebug()<<"";
    }
    if(QByteArray("").isEmpty())
    {
        qDebug()<<"";
    }
    if(QByteArray().isEmpty())
    {
        qDebug()<<"";
    }


}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    test();
    test_types();
    test_qbytearray();
    test_qbytearray_resize();
    test_qbytearray_fill();
    test_qbytearray_right_left_mid();
    test_qbytearray_size();

    test_datatype_convert();
    test_qbytearray_charpoint_std_string_qstring();
    return a.exec();
}

http://www.kler.cn/a/891.html

相关文章:

  • 如何制作一个高质量的 Dockerfile 镜像:从入门到实践
  • 使用 configparser 读取 INI 配置文件
  • G1原理—7.G1的GC日志分析解读
  • Maven 在尝试连接到 Maven Central 仓库超时的解决方案和排查步骤
  • 2025 年 UI 大屏设计新风向
  • 在 Ubuntu 上安装和配置 Redis
  • 奇异值分解(SVD)原理与在降维中的应用
  • 关于.Net和Java的看法——我见过最牛的一个小实习生经历
  • 女子举重问题
  • 力扣-排名靠前的旅行者
  • 【Java版oj】day10 井字棋、密码强度等级
  • 【2023-03-10】JS逆向之美团滑块
  • day1 —— 拿捏1~n的求和问题
  • Java中的异常
  • 《Spring Boot 趣味实战课》读书笔记(二)
  • 【webrtc】ICE 到VCMPacket的视频内存分配
  • 基于GPT-4的免费代码生成工具
  • Qt学习_08_用独立的文件存放样式表
  • Web漏洞-命令执行和代码执行漏洞
  • 百度终于要出手了?文心一言
  • 文心一言发布的个人看法
  • react的基础使用
  • 【每日一题】——网购
  • 双指针 -876. 链表的中间结点-leetcode
  • 【面试题系列】K8S常见面试题
  • 【vue.js】在网页中实现一个金属抛光质感的按钮