变长数据包数据结构定义

描述

变长数据包

定长数组使用方便, 但是却浪费空间, 指针形式只多使用了一个指针的空间, 不会造成大量空间分浪费, 但是使用起来需要多次分配, 多次释放, 那么有没有一种实现方式能够既不浪费空间, 又使用方便的呢?

GNU C 的0长度数组(变长数组/柔性数组)就是这样一个扩展. 对于0长数组的这个特点,很容易构造出变成结构体,如缓冲区,数据包等等:

  • 数据结构定义
//  0长度数组
struct zero_buffer
{
    int     len;
    char    data[0];
};
  • 数据结构大小

这样的变长数组常用于网络通信中构造不定长数据包, 不会浪费空间浪费网络流量, 因为char data[0]; 只是个数组名, 是不占用存储空间的,

sizeof(struct zero_buffer) = sizeof(int)

  • 数据包创建

我们使用的时候, 只需要开辟一次空间即可:

///  开辟
    if ((zbuffer = (struct zero_buffer *)malloc(sizeof(struct zero_buffer) + sizeof(char) * CURR_LENGTH)) != NULL)
    {
        zbuffer- >len = CURR_LENGTH;
        memcpy(zbuffer- >data, "Hello World", CURR_LENGTH);


        printf("%d, %sn", zbuffer- >len, zbuffer- >data);
    }
  • 释放

释放也是一样的, 一次释放即可:

///  销毁
    free(zbuffer);
    zbuffer = NULL;
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分