问题:
今天在用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;
....
}