首页 > 其他分享 >使用C99 变长数组和和零长数组特性封装协议回复消息

使用C99 变长数组和和零长数组特性封装协议回复消息

时间:2024-07-30 14:30:31浏览次数:13  
标签:C99 cmd uint8 len 数组 CmdType data ptr 零长

背景:主从机交互协议中,需要针对不同控制字封装回复消息接口。本文使用变长数组特性和零长数组特性对这类接口进行统一封装。

 

 1 #pragma pack(1)
 2 typedef struct {
 3     uint8_t magic;
 4     uint8_t len_H;
 5     uint8_t len_L;
 6     uint8_t cmd;
 7     uint8_t data[0];
 8 } CmdType;
 9 #pragma pack()
10 
11 void SendCmd(uint8_t* data, int len)
12 {
13     for (int i = 0; i < len; i++) {
14         printf("%#x ", data[i]);
15     }
16     printf("\n");
17 }
18 
19 void ComandTrasmit(uint8_t cmd, uint8_t* data, int len) 
20 {
21     uint8_t tx[sizeof(CmdType) + len];
22 
23     CmdType* cmd_ptr = (CmdType*)tx;
24     cmd_ptr->magic = 0x5A;
25     cmd_ptr->len_H = ((len + sizeof()) >> 8) & 0xff;
26     cmd_ptr->len_L = (len + 1) & 0xff;
27     cmd_ptr->cmd = cmd;
28     if (len > 0) {
29         memcpy(cmd_ptr->data, data, len);
30     }
31     SendCmd(tx, sizeof(CmdType) + len);
32 }

 

标签:C99,cmd,uint8,len,数组,CmdType,data,ptr,零长
From: https://www.cnblogs.com/TheShore/p/18332282

相关文章

  • VB中如何定义和使用数组
    在VisualBasic(VB)中,数组是一种数据结构,用于存储一系列相同类型的数据项。你可以定义数组的大小(即它可以存储多少个元素),并在程序中使用数组来存储和访问这些数据项。以下是在VB中定义和使用数组的基本步骤:定义数组使用Dim关键字:与声明单个变量一样,你使用Dim关键字来定义数组......
  • js-数组内置函数-filter、map、forEach、reduce
    1、过滤数组-filter筛选数组元素,并生成新数组//过滤出分数为60分以上的数据<script>constarr=[{'name':'张三','score':80},{'name':'张六','score':50},{'name':'李四','score&#......
  • 嵌入式学习之路 7(C语言基础学习——数组)
        数组是一组相同类型数据的集合,也是一组相同类型变量的集合,同时数组本身也是一种数据类型。    在需要定义多个相同类型的产量时,按照以往的方法一个一个定义就相当繁琐,而数组可以批量处理多个数据。一、一维数组1、数组语法:类型说明符 数组名 [常量......
  • 【c语言】数组相关知识
    概念:数组是一组相同类型元素的集合(一种相同类型的变量的集合)      数组也是一种数据类型(构造类型),可以批量处理多个数据。      数组有一维数组、二维数组;特点:连续性      有序性      单一性数组在内存中开辟是线性连续且......
  • c语言字符数组
            字符数组与字符串,字符数据输出用%s表示              上面两种方式的区别:             ......
  • C语言day06(数组、字符数组)
    C语言day06【1】数组1》概念:具有一定顺序的若干变量的集合2》定义格式:存储类型数据类型数组名[元素的个数]例:intarr[5];//定义了一个数组arr,在内存空间中开辟了5个空间来储值在数组中保存的每一条数据都叫(元素)变量数组名:代表数组的首地址(地址常量);数组......
  • 数组练习
    1、根据班级人数创建一个数组,要求每个人的姓名都要放进去 Console.Write("请输入班级人数:"); intn=int.Parse(Console.ReadLine()); string[]name=newstring[n]; for(inti=0;i<n;i++) { Console.Write("请输入第{0}个人的姓名:",i+1); nam......
  • Java数组基础
    java数组基础知识1.数组1.1数组介绍数组就是存储数据长度固定的容器,存储多个数据的数据类型要一致。1.2数组的定义格式1.2.1第一种格式数据类型[]数组名示例:int[]arr;    double[]arr;   char[]arr;1.2.2第二种格式数据类型数组名[]示例:i......
  • 数组概念
    数组是编程语言中常见的一种数据结构,可以存储多个数据,每个数组元素存放一个数据,通常可以通过数组元素的索引来访问数组元素,包括赋值,取值,同时,java语言的数组具有其特有的特征。​数组也是一种类型。Java中的数组要求所有的数组元素具有相同的数据类型。因此在一个数组......
  • 数组
    数组1.数组的概念数组是相同类型数据的有序集合。数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问它们。数组的四个基本特点:1.长度是确定的。数组一旦被创建,它的大小就是不可以改变的。2.......