制定自己的二进制协议(柔性数组打包)
1.定义一个柔性数组的结构体
struct protocolStruct{
char type[16];
char fileName[NAME_MAX];
char buf[];
};
2.申请一块连续的内存地址
buf_len = sizeof(size_t)+sizeof(struct protocolStruct)+strlen(read_buf);
auto len_addr = (size_t *)malloc(buf_len);
3.对地址内的值做偏移赋值
memcpy(len_addr,&buf_len,sizeof(buf_len));
auto dataStruct = (protocolStruct*)(len_addr + 1);
bzero(dataStruct,sizeof(protocolStruct));
memcpy(dataStruct->type,"sentry-log",sizeof("sentry-log"));
memcpy(dataStruct->fileName,fileName.c_str(),strlen(fileName.c_str()));
memcpy(dataStruct->buf,read_buf,strlen(read_buf));
4.解释
由于第一块申请的是size_t,首地址为size_t 加以 就会偏移size_t个字节,然后把剩余的地址内容转化为(protocolStruct),每块进行赋值,最后的buf[]是一个柔性数组,直接memcpy赋值给这个地址字符串内容就可以。
转载:https://blog.csdn.net/qq_32783703/article/details/101035586
查看评论