QByteArray在串口通讯中经常被使用,有一定必要较为全面详细的对QByteArray进行阐述。

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
5 常用转换包括:

1)转为HEX,用于显示十六进制,这点在调试时特别有用,因为大多HEX码是没有字符显示的,如0x00、0x20等等;

2)转为不同进制数值并显示,如二进制、八进制、十进制和十六进制等;

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"
5.5 与字符串互转
    QByteArray与QString互转极为简单,二者从本质上类似,都是连续存储,区别是前者可以存无法显示的字符,后者只存可显示的字符。如QByteArray可以存0x00-0x19,而QString则存储如0x30等可显示字符(0x20-0x7E)。可显示字符可参见ASCII表,链接如下:ASCII可显示字符

QByteArray转为QString示例:

QByteArray ba("abc123");
QString str = ba; 
//或str.prepend(ba);
qDebug()<<str ;
//输出:"abc123"
    QString转为QByteArray示例:

QString str("abc123");
QByteArray ba = str.toLatin1();
qDebug()<<ba;
//输出:"abc123"

QByteArray详解(qt)相关推荐

  1. 详解 QT 主要类 QWidget

    QWidget类是所有用户界面对象的基类,每一个窗口部件都是矩形,并且它们按Z轴顺序排列的.一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分. 先来看内容. AD: 2013云计算架构师 ...

  2. Qt总结之十五:QByteArray详解

    一.QByteArray类 提供一个字节数组,QByteArray可用于存储原始字节(包括"\ 0" )和传统的8位 "\ 0" 端接字符串 . 使用QByte ...

  3. qt4.7 mysql_详解Qt 4.7编译和访问Mysql驱动

    Qt4.7编译和访问Mysql驱动是本文要介绍的内容,不多说,我们来看内容.今天摸索了一上午,终于用qt连上mysql了 1.安装一个mysql5.0以上版本*** 要求:(1)安装路径不要有空格和点 ...

  4. qt4.7 mysql 6.3 版本_详解Qt 4.7编译和访问Mysql驱动

    Qt4.7编译和访问Mysql驱动是本文要介绍的内容,不多说,我们来看内容.今天摸索了一上午,终于用qt连上mysql了 1.安装一个mysql5.0以上版本*** 要求:(1)安装路径不要有空格和点 ...

  5. 【精华】详解Qt中的内存管理机制

    前言 内存管理,是对软件中内存资源的分配与释放进行有效管理的方法和理论. 众所周知,内存管理是软件开发的一个重要的内容.软件规模越大,内存管理可能出现的问题越多.如果像C语言一样手动地管理内存,一会给 ...

  6. 详解 Qt 串口通信程序全程图文 (2)

    Qt 串口通信程序全程图文是本文介绍的内容,上一部分中已经介绍了实现最简单的串口接收程序的编写,下面将对程序内容进行分析. 1.首先应说明操作串口的流程 步骤一:设置串口参数,如:波特率,数据位,奇偶 ...

  7. 详解 Qt 串口通信程序全程图文 (1)

    Qt 串口通信程序全程图文 是本文介绍的内容,在Qt中并没有特定的串口控制类,现在大部分人使用的是第三方写的qextserialport类,我们这里也是使用的该类.我们可以去 http://sourc ...

  8. qt linux 串口eventdriven,详解 Qt 串口通信程序全程图文 (1)

    Qt 串口通信程序全程图文 是本文介绍的内容,在Qt中并没有特定的串口控制类,现在大部分人使用的是第三方写的qextserialport类,我们这里也是使用的该类.我们可以去 http://sourc ...

  9. Qt值得学习吗?详解Qt的几种开发方式

    qt值得学习吗? 嵌入式要学的东西真的很多,我们可能会说不写界面的话就不用学qt了?我不赞同. Qt的实现主要是采用p-impl手法,实现接口与实现分离,它有很好的消息循环机制,有的对象与线程的相关性 ...

最新文章

  1. Python的设计目标
  2. 细思极恐的2016智能交通!怎么回事?
  3. maya室内模型_超全室内外设计贴图素材库合辑 | 57G
  4. openstack mysql 故障_Openstack mysql自发连接错误2006,“mysql服务器已经离开
  5. 关于Lambda和匿名内部类
  6. Unity将来时:IL2CPP是什么?
  7. 这5部不容错过的超高评价纪录片,带你领略地球的魅力!
  8. [JLOI2015]管道连接(斯坦纳树)
  9. 计算机组装与维修考试试卷,计算机组装与维修期末考试试卷..doc
  10. 一段简单的python代码_一个简单的python写的C/S程序
  11. Jquery之AJAX用户注册表单验证(Vancl版)
  12. react native环境搭建的一些坑
  13. win10 系统把装在c盘的软件移到其他盘的方法
  14. (7)公众号开发-自定义菜单
  15. win10任务栏无反应解决办法
  16. 生存分析(Survival Analysis)、Cox风险比例回归模型(Cox proportional hazards model)及
  17. Docker加速器 DaoCloud
  18. 程序员女盆友的学习日记(没内容)
  19. [Python图像处理] 合成微缩效果
  20. 大前端CPU优化技术--NEON自动向量化

热门文章

  1. PVCBOT【27号】机械避役--线控变色龙机器人
  2. 华为鸿蒙麒麟玉兔_华为!《鸿蒙出世:中国神兽图鉴》
  3. android 渐变的背景色,Android背景渐变xml
  4. PHP底层入门的一些概念
  5. 【论文阅读】Color Constancy by Learning to Predict Chromaticity from Luminance
  6. matlab小端模式合并,大端方式和小端模式【YC】
  7. 【Gas优化】GasChecker
  8. APP应用测试要点。。。。我知道的就这么多
  9. 计算机excel中行高在哪里,电脑Excel表格怎么对行高和列宽进行调整
  10. 洛谷P3975 - [TJOI2015]弦论