在C中的结构中遍历元素以提取单个元素的值和数据类型

赤井

我有一个要求,我要在C中使用大型结构,其中包含大约30多个不同数据类型的不同元素:

typedef struct {
  type1 element1;
  type2 element2;
  type3 element3;
  type2 element4[10];
  ...
  typeN elementN;
} my_messg_struct;

这基本上是通过串行协议发送的消息中的一组元素。该消息具有上述结构中捕获的数据类型不同的各种元素。同样,我还有很多其他信息。现在,我必须编写一个通用函数,该函数负责读取这些消息结构,并循环遍历每个元素,以读取元素的值和数据类型,然后通过串行端口进行传输。我需要先读取数据类型,因为在我的情况下,各种数据类型的传输顺序是不同的。

因此,基本上,我只是想知道如何在C中循环遍历结构的元素,这样我才能读取结构中存在的每个元素的值和数据类型?

您可以尝试使用X宏,但是产生的源代码可读性令人怀疑:

 #include <stdio.h>

 #define LIST_OF_VARIABLES \
     XI(int, value1) \
     XD(double, value2) \
     XU(unsigned, value3)


 #define XI(int, name) int name;
 #define XD(double, name) double name;
 #define XU(unsigned, name) unsigned name;
 typedef struct A {
     LIST_OF_VARIABLES
 } A;
 #undef XI
 #undef XD
 #undef XU

 void print_variables(struct A a)
 {
 #define XI(type, name) printf("%s = %d\n", #type, a.name);
 #define XD(type, name) printf("%s = %f\n", #type, a.name);
 #define XU(type, name) printf("%s = %u\n", #type, a.name);
 LIST_OF_VARIABLES
 #undef XI
 #undef XD
 #undef XU
 }

 int main(void) {
     A a = {
         .value1 = 10,
         .value2 = 0.5,
         .value3 = 1,
     };
     print_variables(a);
     return 0;
 }

现在,在每种#type情况下都放置了一个类型字符串,您可以使用一些字符串比较功能来确定每种类型的基础。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何提取对象元素以作为单个元素填充到数组中

在python中返回值和数据类型验证

如何在Selenium Web Automation(Python)中遍历Web元素以从HTML标签提取文本?

您如何遍历数组并根据其数据类型提取元素?

从Connection对象的entries属性中提取的单个元素在python中代表什么数据类型?

OCaml 中抽象数据类型中的匹配元素

遍历元组数据类型中的类型

c - 如何从c中的单个函数返回具有不同数据类型的多个值

如何遍历XML中的元素以将其切碎并加载到数据库

在python中,如何更改列表的元素数据类型

遍历Pig中的元素以生成用于关系的新元组

使Rails遍历元素以表示表中的项目

从XSL中的XML文件中提取单个元素的值

使用C中的指针循环遍历结构元素

从 numpy 数组中删除特定元素 [以前] 从 numpy 数组中按数据类型选择元素

如何从C中的结构数组初始化单个元素?

结构数据类型中的 char 数组

如何在Rust中遍历结构的元素?

在MySQL中存储动态数据和数据类型

C ++和C#中'this'指针的概念和数据类型

XSLT2.0中的精度,舍入和数据类型

理解 SQLite 中的日期时间和数据类型

在Teradata中显示列名和数据类型?

PostgreSQL中物化视图的列名和数据类型?

SQL Server中的输入参数和数据类型问题

数据类型的访问元素

Objective-C中的数据类型和数组的疯狂问题

c中的指针和数据结构

在C ++中定义变量:数据类型(值)