0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

变长数据包数据结构定义

麦辣鸡腿堡 来源:嵌入式Linux充电站 作者:Vincent 2023-09-27 15:08 次阅读

变长数据包

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

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;
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136771
  • 数据包
    +关注

    关注

    0

    文章

    261

    浏览量

    24390
  • 数据结构
    +关注

    关注

    3

    文章

    573

    浏览量

    40127
收藏 人收藏

    评论

    相关推荐

    不同数据结构定义代码

    数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
    的头像 发表于 11-29 14:13 641次阅读

    什么是数据结构(Data Structrue)

    的一个一个元素数据对象:具有相同特性的数据元素的集合结构数据元素之间具有的关系(联系) 二.  数据结构
    发表于 02-09 17:17

    数据结构

    1.数据结构的概念 所谓数据结构是指由某一数据对象及该对象中所有数据成员之间的关系组成的集合。成员之间的关系有很多种,最常见的是前后件关系。 2.
    发表于 03-04 14:13

    数据结构链表的基本操作

    嵌入式学习基础-数据结构链表的基本操作链表节点采用结构体的方式进行定义,下面是最基础的定义只有一个数据data,*pNext用于指向下一个节
    发表于 12-22 08:05

    OBS边缘节点中变长数据包突发汇聚实现

    基于光突发交换边缘节点在组装数据包前要采用交换阵对其进行突发汇聚,描述了交换阵常用的串行输入轮循算法,根据边缘节点中数据包变长突发汇聚的特点提出了变长串行输
    发表于 04-19 19:16 18次下载

    数据结构教程,下载

    1. 数据结构的基本概念 2. 算法与数据结构3. C语言的数据类型及其算法描述要点4. 学习算法与数据结构的意义与方法
    发表于 05-14 17:22 0次下载
    <b class='flag-5'>数据结构</b>教程,下载

    网络数据包捕获机制研究

    网络数据包捕获威廉希尔官方网站 ,是实现入侵检测、网络安全审计的关键威廉希尔官方网站 。本文改进了国外传统的数据包捕获函数库Libpcap 捕获数据包的方案。原方案在网卡捕获到数据包后,
    发表于 09-01 10:09 9次下载

    基于Jpcap的数据包捕获器的设计与实现

    本文研究了以太网数据包的捕获机制,实现了基于JPcap的网络数据包捕获工具,其基本原理是通过调用Jpcap库捕获本地网络上的所有数据包,然后对数据包进行协议解码,从而可以实
    发表于 01-15 13:47 38次下载

    数据包过滤原理

    数据包过滤威廉希尔官方网站 数据包过滤原理              数据包过滤威廉希尔官方网站 是防火墙最常用的威廉希尔官方网站 。对于一
    发表于 06-16 23:44 4613次阅读
    <b class='flag-5'>数据包</b>过滤原理

    什么是数据包

    什么是数据包? 您在互联网上做的一切都涉及到数据包。例如,您接收的每个网页都以一系列数据包的形式传入,您发送的每封电子邮件都以一系列数据包的形式传出。以
    发表于 08-03 09:13 2023次阅读

    数据结构是什么_数据结构有什么用

    数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高
    发表于 11-17 14:45 1.6w次阅读
    <b class='flag-5'>数据结构</b>是什么_<b class='flag-5'>数据结构</b>有什么用

    什么是数据结构?为什么要学习数据结构数据结构的应用实例分析

    本文档的主要内容详细介绍的是什么是数据结构?为什么要学习数据结构数据结构的应用实例分析包括了:数据结构在串口通信当中的应用,数据结构在按键
    发表于 09-26 15:45 14次下载
    什么是<b class='flag-5'>数据结构</b>?为什么要学习<b class='flag-5'>数据结构</b>?<b class='flag-5'>数据结构</b>的应用实例分析

    网络数据包分析软件wireshark的基本使用

    Wireshark(前称Ethereal)是一个网络数据包分析软件。网络数据包分析软件的功能是截取网络数据包,并尽可能显示出最为详细的网络数据包数据
    的头像 发表于 09-29 14:48 3033次阅读

    NetApp的数据结构是如何演变的

    统一数据跨分布式资源进行管理,以实现数据移动的一致性和控制,安全、可见性、保护和访问。 本文定义数据结构及其体系结构,讨论了
    发表于 08-25 17:15 0次下载
    NetApp的<b class='flag-5'>数据结构</b>是如何演变的

    如何使用指针数据包定义数据缓冲区

    , 只浪费了一个指针域的空间. 数据包定义 struct point_buffer{ int len; char * data ;}; 数据结构大小 考虑对齐, 那么数据结构的大小 >
    的头像 发表于 09-27 15:01 490次阅读