Qt之QByteArray各类数值转化

QByteArray类对象的字符若都为数值,则可通过to**函数(也称为方法)转为各种类型的数据,示例如下:

QByteArray与char*互转

成员函数data可以返回指向字节数组中存储数据的指针。该函数的原型声明如下:

char*data();

该指针可用于访问和修改组成数组的元素。可以指定具体访问字节数组中的某一个,比如

ba.data()[0]

表示访问第0个.如果要把char*转为QString,可以直接作为参数传入QByteArray类的构造函数中:

char* pt;

QByteArray byte(str);

我们来看一个小例子。 返回char*并打印内容。

1)启动Qt Creator 5.12,新建一个控制台项目,项目名为test。

(2)在test.cpp中输入如下代码:成员函数data可以返回指向字节数组中存储数据的指针。

#include <QCoreApplication>

#include <iostream>

#include <QDebug>

using namespace std;

int main(int argc, char *argv[]){

QCoreApplication a(argc, argv);

QByteArray ba("Hello world");

char *data = ba.data();//返回一个指向字节数组 ba 的指针,指向第一个字符

qDebug() << ba.data(); //打印整个字符

while (*data){

cout << "["*data << "], ";

++data;

}

return a.exec ();

}

(3)按Ctrl+R快捷键运行项目,结果所示:

Hello world

H,e,1,1,o, ,w,o,r,1,d,

QByteArray与std::string互转

string是C++标准库中的字符串类型。QByteArray类提供的成员函数toStdString()可以将字节数组转为string。该函数的原型声明如下:

std::string tostdString();

与该函数相反的函数是静态成员函数fromStdString(),它将string数据转为字节数组,该函数的原型声明如下:

[static] QByteArray QByteArray::fromStdString(const std::string &str);

其中,参数str是要转换的string字符串。函数返回转换后的字节数组。注意,转换的是str的一份备份,转换过程并不会影响str本身的内容。其中,参数str是要转换的string字符串。函数返回转换后的字节数组。注意,转换的是str的一份备份,转换过程并不会影响str本身的内容。

与字符串QString互转

QString是Qt的字符串类,QByteArray是byte的数组。它们之间也可以互转。QByteArray与QString互转极为简单,二者在本质上是类似的,都是连续存储的,区别是前者可以存储无法显示的字符,后者只存储可显示的字符。如QByteArray类对象可以存储0x00-0x19,而QString类对象只能存储如0x30等可显示字符(Ox20-0x7E)。有关可显示字符,可参见ASCII表,相信大家在学习C语言时都了解过了。String转QByteArray的代码如下:

QString str=QString("hello world!");

QByteArray arr = str.toLatin1();

QByteArray转QString的代码如下:

QByteArray arr("hello world!");

QString str = arr;

下面再看一下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与自定义结构体之间的转化

在Socket网络编程中,网络数据一般是uchar类型(最好是用uchar来传输,避免莫名其妙的错误另外用char类型也可以),在Qt中则可以使用QByteArray类。QByteArray类在OSocket共享库中,根据C++中char*数据与结构体之间的映射可以实现结构体与QByteArray的转化。下面来看一段代代码:

结果如下:

friend QDebug operator<<

这句语句是 C++ 中用于重载输出运算符 << 的一种典型用法。在这里,它的目的是为了使 QDebug 类能够更方便地输出特定类型的对象。

首先,QDebug 是 Qt 框架中用于输出调试信息的类。通过重载 << 运算符,你可以自定义类的输出行为,使其能够直接与 QDebug 对象一起使用。

假设你有一个类 MyClass,你想要能够以更友好的方式将其对象输出到 QDebug,你可以这样做

class MyClass {
    // 类的定义
public:
    // ...
};

QDebug operator<<(QDebug debug, const MyClass &obj) {
    // 自定义输出逻辑
    debug << "MyClass object";  // 这里可以根据实际情况输出你想要的信息
    return debug;
}

friend 关键字在 C++ 中用于声明一个函数或类是另一个类的友元。友元函数或友元类具有访问其所在类的私有成员的权限。这允许在特定情况下赋予外部函数或类对私有成员的访问权,从而提供更灵活的设计。

相关推荐
萧鼎17 分钟前
Python并发编程库:Asyncio的异步编程实战
开发语言·数据库·python·异步
学地理的小胖砸18 分钟前
【一些关于Python的信息和帮助】
开发语言·python
疯一样的码农18 分钟前
Python 继承、多态、封装、抽象
开发语言·python
^velpro^19 分钟前
数据库连接池的创建
java·开发语言·数据库
秋の花27 分钟前
【JAVA基础】Java集合基础
java·开发语言·windows
小松学前端30 分钟前
第六章 7.0 LinkList
java·开发语言·网络
可峰科技39 分钟前
斗破QT编程入门系列之二:认识Qt:编写一个HelloWorld程序(四星斗师)
开发语言·qt
全栈开发圈44 分钟前
新书速览|Java网络爬虫精解与实践
java·开发语言·爬虫
面试鸭1 小时前
离谱!买个人信息买到网安公司头上???
java·开发语言·职场和发展
小白学大数据1 小时前
JavaScript重定向对网络爬虫的影响及处理
开发语言·javascript·数据库·爬虫