Qt之QByteArray各类数值转化

文章介绍了QByteArray类在C++中的使用,包括与char*、QString、std::string的互转,以及在socket编程中的应用,重点提到了data()函数、fromStdString方法和QDebug重载输出运算符的使用。
摘要由CSDN通过智能技术生成

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

  • 27
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

行者..................

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值