请教一个结构体问题,C语言如何判断结构体成员数据类型
typedef struct{
u8 DAT1;
u16 DAT2;
u32 DAT3;
u8 DAT4;
}AAAA;
比如这个结构体里面有好多种数据类型,有没有什么办法可以快速判断数据类型
sizeof? typeof? 你是要搞反射? {:lol:}如果结构体里面数据比较多,处理起来麻烦,代码好长,如果有什么办法直接可以if()可以知道是单个变量,还是数组 C结构体里面的数据类型和位置都是固定的,为何还要判断类型?一定要判断的话可以通过计算成员指针相对结构体指针的位置来判断。不过要注意字节对齐问题。 见 C11 新增的关键字 _Generic
https://www.amobbs.com/thread-5741754-1-1.html
#include <stdio.h>
typedef enum {
TYPE_U8,
TYPE_U16,
TYPE_U32,
TYPE_U8_ARRAY
} DataType;
typedef struct {
DataType type;
union {
u8 DAT1;
u16 DAT2;
u32 DAT3;
u8 DAT4;
} data;
} AAAA;
void printData(AAAA* a) {
switch (a->type) {
case TYPE_U8:
printf("DAT1: %u\n", a->data.DAT1);
break;
case TYPE_U16:
printf("DAT2: %u\n", a->data.DAT2);
break;
case TYPE_U32:
printf("DAT3: %u\n", a->data.DAT3);
break;
case TYPE_U8_ARRAY:
printf("DAT4: %u, DAT4: %u\n", a->data.DAT4, a->data.DAT4);
break;
default:
printf("Unknown data type\n");
}
} 楼主,能否说下这是要用在啥地方的?为啥要去判断结构体成员数据类型 得分情况讨论:
a. 你在源码阶段已有 struct 定义,这之后你用 sizeof、& 都可以判定数据尺寸,进而判断;
b. 你在源码阶段未知 struct 定义,类似于串流过来一个 void* 和 sizeof(packet),需要你动态判断结构体内部数据,
这种情况在 C 里边无解,因为串流可以翻译成任意的结构体,除非自定协议描述其中数据类型。 为什么要判断,指针扎?数据流转结构体吗,序列化反序列化? 6楼的应该可以,回头试试 6楼的,我在下keil下试了可以
页:
[1]