TCP通讯:结构体内容与字符数组的互相转换

问题
今天在用QT实现与设备的TCP通讯时,根据通讯协议,需要将自定义格式的结构体与字符数组进行相互转换,以便于结构体内容的发送与接收。

实现方法
结构体---->字符数组(字符串)

struct Data
{
	int age;
	char sex;
	...
};
const int DATA_LEN = sizeof(Data)  //根据对齐原则可自动获取结构体长度

Data data;
data.age= ...  //结构体赋值
data.sex= ...
int Len = DATA_LEN ;
char *src = new char[Len];
memset(src,0,Len);
memcpy(src,&data,Len);

/*TCP 发送src字符数组
	*****
*/
delete[] src;

Tcp回传数据转化为所需要结构体,并解析输出:
十六进制数(字符数组)---->结构体

QByteArray buffer = tcpsocket->readAll();
if(!buffer.isEmpty())
{
	int Len = buffer.legnth();
	char* buf = buffer.data(); //获取buffer的字符数组  
	
	Data gram_data = { 0 };
	memset(&gram_data,0,DATA_LEN);
	memcpy(&gram_data,buf,DATA_LEN);
	
	//获取结构体回传数据
	int age = gram_data.age;
	....
}
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值