QByteArray和自定义结构体之间的相互转换

通信协议中QByteArray和自定义结构体之间直接的相互转化

承接上篇博客,写一下QByteArray和自定义结构体之间的相互转化。
这个东西主要用于通信协议的制定和传输。

自定义的结构体用于和制定的通信协议相匹配;QByteArray用于将自定义的结构体转化为字节流,用于网络传输。

下面介绍一下他们之间的相互转化。

1. struct转化为QByteArray:

struct StTest
{
	int iNum1;
	char chNum;
	int iNum2;
};
QByteArray arrTest;
StTest test;
arrTest.append((char*)&test, sizeof(StTest));

使用的原理就是QByteArray中的append函数,append(char ch, int iLen),将结构体直接强制转化为 char 类型的指针,然后将地址传递过去,同时将长度传递给该函数。
但是在使用的时候应该注意,这个sizeof适应于定长的结构体,对于含有QByteArray和char*之类的结构体,因为长度不固定,可以进行拆分操作,分别进行append,就可以了(详见上一篇)。

2. QByteArray转化为结构体

StTest *pTest = (StTest*)arrTest.data();

QByteArray转化为结构体,主要依赖的是QByteArray的data()函数,该函数返回的是char类型的指针,然后将结构体的指针指向这个char类型的指针指向的地址即可,注意的是需要将QByteArray::data()函数转化为制定的结构体指针类型。

总结:
结构体转化为QByteArray,主要使用的是append()函数;
QByteArray转化为结构体,主要使用的data()函数。
在使用过程中,要注意类型的转化问题。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值