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