小言_互联网的博客

制定自己的二进制协议(柔性数组打包)

310人阅读  评论(0)

制定自己的二进制协议(柔性数组打包)

 

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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场