功能描述:

typedef struct
{
    unsigned char ucPort;
    pid_t stPid;
}TEST_INFO_S;

结构体TETS_INFO_S内有两个变量分别是ucPort和stPid,在本文中把此结构体作为TLV的value部分,type部分为0,len为此结构体的大小。

代码实现:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>#define TEST_TYPE 0
typedef struct
{unsigned char ucPort;pid_t stPid;
}TEST_INFO_S;typedef struct
{unsigned int uiType;unsigned int uiLen;
}TLV_HEAD_S;/* 简述:封装tlv结构体* 参数:unsigned int uiType 封住tlv结构体中的type字段*       void *pvData 要封装的数据*        unsigned int uiLen 要封装的数据长度* 返回值:成功后返回封装后结构体的地址,失败返回NULL* 备注:封装后的结构体空间使用完后需要释放* */
void * tlv_encap(unsigned int uiType, void *pvData, unsigned int uiLen)
{void *pvTlv = NULL;TLV_HEAD_S *pstTlvHead = NULL;unsigned int uiDataLen = sizeof(TEST_INFO_S) + uiLen;pvTlv = calloc(1, uiDataLen);if(NULL == pvTlv){return NULL;}pstTlvHead = (TLV_HEAD_S *)pvTlv;pstTlvHead->uiType = uiType;pstTlvHead->uiLen = uiLen;memcpy(pvTlv + sizeof(TLV_HEAD_S), pvData, uiLen);return pvTlv;
}int main()
{TEST_INFO_S stTest = {0};void *pvTlvRes = NULL;stTest.ucPort = 55;stTest.stPid = 33;pvTlvRes = tlv_encap(TEST_TYPE, &stTest, sizeof(stTest));if(NULL == pvTlvRes){return -1;}TLV_HEAD_S *pstTlvHead = NULL;pstTlvHead = (TLV_HEAD_S *)pvTlvRes;printf("%d\n",pstTlvHead->uiType);    printf("%d\n",pstTlvHead->uiLen);  TEST_INFO_S *pstTest = {0};pstTest = (TEST_INFO_S *)(pvTlvRes + sizeof(TLV_HEAD_S));printf("%d\n",pstTest->ucPort); printf("%d\n",pstTest->stPid); return 0;
}

显示结果:

[root@localhost tlv]# ./tlv
0
8
55
33

C语言——把结构体数据封装成TLV格式的数据相关推荐

  1. golang中结构体转成xml格式

    本文主要介绍结构体与xml格式的字符串进行相互转换,Go自带xml包,所以进行格式转换非常的方便. 一.结构体转成xml格式 1.转成不需要排版的xml格式字符串,可直接使用Marshal()方法 f ...

  2. Go语言进阶,结构体与json字符串格式的互相转换

    对于结构体大家都很熟悉,是一种自定义类型,可以将不同类型的同属于这个类的属性(成员变量)集合在一起,换句话说这些成员变量属于键值对,那么这种也就是常见的json格式,我们来看下如何将结构体转成json ...

  3. C 语言编程 — 结构体的数据类型转换

    目录 文章目录 目录 数组类型强制类型转换为结构体 结构体之间的强制类型转换 数组类型强制类型转换为结构体 先看一个例子: #include <stdio.h>int main(void) ...

  4. 【剑仙教程】易语言的结构体。自定义数据类型。

    1楼. [剑仙教程]易语言的结构体.自定义数据类型. 在易语言中,有基本数据类型,自定义数据类型. 自定义数据类型,在C语言/C++中称为结构体.这是面向对象和类的编程. . . 先上代码.打开易语言 ...

  5. java接收c语言的结构体

    java接收c语言的结构体 DataInputStream inputStream = new DataInputStream(s.getInputStream()); int read = 0; i ...

  6. c语言常量结构体的成员,c语言之结构体

    c语言之结构体 1.结构体基础知识 C语言提供了两种类型的聚合数据类型(能够同时存储超过一个的单独数据),数组和结构.数则是相同类型的元素的集合,而结构也是一些值的集合,这些值称为它的成员,单一个结构 ...

  7. c语言 结构体的,c语言之结构体

    c语言之结构体 1.结构体基础知识 C语言提供了两种类型的聚合数据类型(能够同时存储超过一个的单独数据),数组和结构.数则是相同类型的元素的集合,而结构也是一些值的集合,这些值称为它的成员,单一个结构 ...

  8. c语言 结构体 ppt,第8章C语言的结构体和共同体.ppt

    <第8章C语言的结构体和共同体.ppt>由会员分享,可在线阅读,更多相关<第8章C语言的结构体和共同体.ppt(41页珍藏版)>请在皮匠网上搜索. 1.1第八章结构体.共用体和 ...

  9. 【Golang第8章:面向对象编程】Go语言的结构体是什么,怎么声明;Golang方法的调用和声明;go语言面向对象实例,go语言工厂模式;golang面向对象的三大特性:继承、封装、多态

    介绍 这个是在B站上看边看视频边做的笔记,这一章是Glang面向对象编程 这一章内容较多,内容有Go语言的结构体是什么,怎么声明:Golang方法的调用和声明:go语言面向对象实例,go语言工厂模式: ...

最新文章

  1. 合肥工业大学—SQL Server数据库实验二:数据库架构的创建与使用
  2. NLPIR语义挖掘建互联网内容处理全技术链条
  3. Xamarin只言片语2——Xamarin下的web api操作
  4. ubuntu16.04版本 the system is running in low-graphics mode
  5. VTK:绕线旋转用法实战
  6. java高并发(十二)并发容器J.U.C
  7. Gradle task
  8. 【ArcGIS风暴】缓冲区分析、叠置分析综合实验案例:购房区域的选择
  9. 年底了,总结一下大型网站的入侵经验[t00ls转载]
  10. js矢量图类库:Raphaël—JavaScript Library
  11. JAVA 数据类型数组
  12. 如何查看一个组件的 classid是多少_如何快速查看胎压?胎压多少才正常?带您全面了解爱车的轮胎...
  13. java.io.File 的一些记录
  14. 10配置php环境_macOS配置PHP环境
  15. Matlab笔记之符号运算中的矩阵转置
  16. 利用JAVA的BFS爬虫爬出豆瓣读书的评论和标签
  17. ios 代码写Button小结
  18. 使用DistrbutedDataParallel时,nvdiai-smi显示每个进程都占用GPU:0
  19. 【ATE-SENT协议】使用LabVIEW采集并解析SENT协议
  20. 已知分布函数求概率密度例题_高中数学必修一函数知识点总结

热门文章

  1. mysql中的索引对查询的影响
  2. Button的使用(十三):设置可见性
  3. SpringBoot开发案例从0到1构建分布式秒杀系统
  4. 第二周数据采样过程及结果
  5. C#实现局部峰值查找,功能对应Matlab中的findpeaks.m
  6. springMVC获取file,几种转换
  7. 7-9将灰度转为彩色
  8. 数据仓库与数据挖掘的一些基本概念
  9. UVA 532 - Dungeon Master
  10. Python 文件及目录操作