惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Fortinet All Blogs
有赞技术团队
有赞技术团队
量子位
N
Netflix TechBlog - Medium
博客园 - 叶小钗
博客园 - 三生石上(FineUI控件)
Google DeepMind News
Google DeepMind News
aimingoo的专栏
aimingoo的专栏
GbyAI
GbyAI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Blog — PlanetScale
Blog — PlanetScale
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
月光博客
月光博客
Martin Fowler
Martin Fowler
Y
Y Combinator Blog
宝玉的分享
宝玉的分享
博客园 - 司徒正美
云风的 BLOG
云风的 BLOG
V
Visual Studio Blog
V
V2EX
IT之家
IT之家
L
LangChain Blog
大猫的无限游戏
大猫的无限游戏
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 丹心石

数据字节位改变 锁定鼠标光标到指定屏幕 WPF 访问WebAPI Avalonia 避坑经验总结 Avalonia 窗口与配置 Avalonia 程序打包成Linux平台的运行程序 信号与槽 Qt 串口通信 Avalonia 设计时DataContext数据山下文和WPF设计时DataContext数据上下文 Avalonia Ursa 使用 Avalonia-消息对话框 Avalonia-数据绑定 Avalonia-样式 阿里图标库iconfont 在Avalonia 中的使用 Avalonia MVVM Avlonia 自定义控件 Sqlite EF For ConsoleCore Sqlite EF CodeFirst For WPF win10 环境变量不可编辑 WCF-双工通讯 MahMetro 框架学习 由于缺少调试目标“xxx”Visual Studio 无法开始调试。或者响应地设置outputpath和AssemblyName 属性 WPF 应用程序本地化-资源文件方式 FastReport 行高设置实现行高随内容自动变化
数据处理与转换
丹心石 · 2026-02-13 · via 博客园 - 丹心石

Hex 转换(十六进制转换)

QByteArray 类的共有静态函数 QByteArray::fromHex 可以把十六进制编码的数据转换为字符(char)类型的数据,并存储到QByteArray类对象中。该函数声明如下:

   QByteArray fromHex(const QByteArray &hexEncoded);

其中,参数hexEncoded 是十六进制编码的字节数组。

例:

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

QByteArray类的共有静态函数number 可以将某个整数转换为某种进制的字符素组,函数number原型声明如下:

QByteArray number(int n,int base=10)

其中,参数n是要转变的整数;base是要进行转换的进制,进制取值范围2到36,即从二进制到三十六进制。

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

与此共有静态函数功能类似的共有函数是setNum(),该函数也是将某个证书转为某种进制的字符数组,函数原型声明如下:

QByteArray &setNum(int n,int base=10)

其中,参数n是要转变的整数;base是要进行转换的进制,进制取至范围为2到36 下列代码演示了setNum()函数的使用:

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

因为不是静态函数,所以要用对象来调用。此外,根据setNum()函数第一个参数的类型,setNum()函数可以由多个版本
QByteArray类对象若为带大小写字母的字符串,可调用函数toUpper()和toLower()实现字母大小写转换。
转换之前可以通过isUpper()和isLower()进行判断
QByteArray 类对象的字符若都为数值,则可通过toXXX函数转换为各种数据类型的数据,实例如下:

 QByteArray strInt("1234");
 bool ok;
 qDebug()<<strInt.ToInt(); //1234 注意:默认是把strInt的内容作为十六进制的数1234,因而对应的十进制数为4660
 qDebug()<<st.toInt(&ok2,16); //转换为十六进制

QString 是Qt的字符串类,QByteArray 是byte的数组,它们之间也可以互转。二者本质上是类似的,区别在于QByteArray存储的是无法显示的字符,QString 存储的是可以显示的字符。

QString str=QString("hello world!");
QByteArray arr=str.toLatin1();
//QByteArray 转QString 
QByteArray arr("hello world!")
QString str=arr;
QByteArray ba("abc123");
QString str=ba;
//QString  转为QByteArray
QString str("abc123");
QByteArray ba=str.toLatin1();


在Socket 网络编程中,网络数据一般是uchar 类型。在Qt中则可以使用QByteArray 类 。QByteArray类在QSocket 共享库中,根据c++中 char* 数据与结构体之间的映射可以实现结构体与QByteArray 的转换.

判断是否为空

可以使用函数 isEmpty() 来判断字节数组是否为空,即size 是否为0。函数isEmpty() 的原型声明如下

bool isEmpty();

如果字节数组的size 为0,则返回true,否则返回false
下列代码演示isEmpyte()函数的使用

QByteArray().isEmpty(); //returns true
QByteArray("").isEmpty();// returns true
QByteArray("abc").isEmpty(); // returns false

函数indexOf() 返回该字节数组中第一次出现字节数组ba的索引位置,从索引位置向前搜索,函数的原型声明如下:

int indexOf(const QByteArray &ba,int from =0);

其中,参数ba为要茶轴的目标字节数组ba,找到就返回索引值;from 表示开始搜索位置对应的索引值,默认从索引值为0的位置开始搜索。如果找到ba,则返回第一次出现ba所在位置对应的索引值,如果没有找到则返回-1.注意,所谓向前搜索就是朝着索引值增大的方向搜索,即在数组中从左到右搜索。另外还有一个函数,lastIndexOf()是向后搜索的,声明如下:

int lastIndexOf(const QByteArray &ba,int from =-1);

插入

函数insert()可以在某个索引位置上插入字节数组,该函数的原型声明如下:

QByteArray &insert(int i,const QByteArray &ba);

其中,i为要插入的索引位置;ba为要插入进去的字节数组对象

QByteArray ba("Meal")
ba.insert(1,QByteArray("ontr"))
//ba=Montreal

此外,也可以在某个位置插入一个或多个字符,由两个函数,声明如下:

QByteArray & QByteArray::insert(int i,char ch);
QByteArray & insert(int i,int count,char ch);

其中 ,i为要插入的索引位置;count 是要插入的字符个数,其实就是count 个ch;ch为要插入的字符。
含有另外一种重载形式,就是插入char* 类型的数据

QByteArray & insert(int i,const char* str);
QByteArray & QByteArray::insert(int i,const char*str,int len);

第一中形式不带长度,插入全部str;第二种形式带长度len,len表示str中的len个字节
QChar 类提供了很多成员函数:

函数 说明
bool isDigit() const; 判断是否是十进制数字('0'-'9')
bool isLetter() const; 判断是否是字母
bool isNumber() const; 判断是否是数字,包括正负号、小数点等
bool isLetterOrNumber(); 判断是否是字母或数字
bool isLower() const; 判断是否是小写字母
bool isUpper() const; 判断是否是大写字母
bool isNull() const; 判断是否是空字符
bool isPrint() const; 判断是否可打印字符
bool isSpace() const; 判断是否是分隔符,包括空格
char toAssii() const; 得到字符的Asscii码
QChar toLower() const; 转换成小写字母
QChar toUpper() const; 转换成大写字母
ushort unicode() const; 得到Unicode编码

Qt 中定义了一些与QChar 类相关的比较运算符

bool operator!=(QChar c1,QChar c2);  //判断c1是否不等于c2
bool operator<(QChar c1,QChar c2); //判断c1是否小于c2
.... <= ....
....== ....
....>....
....>=....

QChar 转换为char 可利用下列2个成员函数:

char toLatin1();
char toAscii();