QByteArray与QString学习

QByteArray在串口通讯中经常被使用

QByteArray类提供了很方便的对字节流操作的接口。可以存储raw bytes和传统的8-bits的字符串,都是以’\0’结尾的,使用比char*更方便,从串口读取到的QByteArray数据,一般需要进行提取和解析,此时就需要QByteArray转换为各类型数据。常用转换包括:

  • 转为HEX,用于显示十六进制,这点在调试时特别有用,因为大多HEX码是没有字符显示的,如0x00、0x20等等;
  • 转为不同进制数值并显示,如二进制、八进制、十进制和十六进制等;
  • 转为整型、浮点型等数值类型;
  • 大小写转换;
  • 转为字符串类型;

QByteArray与QString区别

  • QString是专门用来处理字符串的,除了能处理ASCII编码字符,还包括各国语言的编码,默认情况QString会把所有数据当做utf-8编码来处理。QByteArray只是单纯用来处理数据的,除了能处理ASCII编码字符,其它复杂的编码不能处理(所以汉字不能处理),直接以字节流的方式来对待
QString str("小马哥");
QByteArray byte("小马哥");
qDebug() << "str:" << str << "byte:" << byte << endl;
//str: "小马哥" byte: "\xE5\xB0\x8F\xE9\xA9\xAC\xE5\x93\xA5"
  • str保留编码格式,能输出中文,但是QByteArray只把"小马哥"当做普通的字节数据来处理,utf-8编码下,一个汉字占三个字节。

1、与字符串互转

  • QByteArray与QString互转极为简单,二者从本质上类似,都是连续存储,区别是QByteArray可以存无法显示的字符,QString只存可显示的字符。如QByteArray可以存0x00-0x19,而QString则存储如0x30等可显示字符(0x20-0x7E)。可显示字符可参见ASCII表。
  • QString也可以存储字符串信息,但通常以16-bits形式Unicode方式存储,这有利于非ASCII和非Latin-1格式的数据的存储

QByteArray转为QString:

QByteArray ba("123abc小马哥");
QString str = ba; 
qDebug()<<"str:"<<str<<"ba:"<<ba ;
//输出:str:"123abc小马哥"    ba:"123abc\xE5\xB0\x8F\xE9\xA9\xAC\xE5\x93\xA5"

QString转为QByteArray:

QString str("123abc小马哥");
QByteArray byte1 = str.toLatin1(); //按照ASCII编码转换,无法转换中文
QByteArray byte2 = str.toUtf8();   //按照Utf-8编码转换,可以转换中文
qDebug() <<  "byte1:" << byte1 << "byte2:" << byte2;
//byte1: "123abc???"       byte2: "123abc\xE5\xB0\x8F\xE9\xA9\xAC\xE5\x93\xA5"

2、字符串数值转为各类数值

  • QByteArray若为字符串数值,可通过to的方法转为各种类型数据
QByteArray string("1234.56");
qDebug() << string.toInt();
Debug() << string.toFloat();
qDebug() << string.toDouble();   

3、数值转换与输出

  • 尽管QByteArray是一个集合,但也可以作为一个特殊形式的数值用,其灵活的转换格式,可大大方便各种格式数据转换与显示的需求。如显示二进制和十六进制、显示科学计数和指定小数位四舍五入的数值
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"
QByteArray::number(12.3456, 'f', 3);         // returns "12.346"

4、Hex转换

  • 把Hex编码转换为char存储到QByteArray,因为大多HEX码是没有字符显示的,如0x00、0x20等等;
QByteArray text = QByteArray::fromHex("517420697320677265617421");
text.data();            // returns "Qt is great!"

5、大小写转换

  • QByteArray若为带大小写的字符串,可通过toUpper()和toLower()方法实现大小写转换
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值