泡泡鱼lu 发表于 2024-1-2 09:10:58

请教一个结构体问题,C语言如何判断结构体成员数据类型

typedef struct
{
u8 DAT1;
u16 DAT2;
u32 DAT3;
u8 DAT4;
}AAAA;

比如这个结构体里面有好多种数据类型,有没有什么办法可以快速判断数据类型

Himem 发表于 2024-1-2 09:26:31

sizeof? typeof?

albert_w 发表于 2024-1-2 09:26:53

你是要搞反射?

泡泡鱼lu 发表于 2024-1-2 09:54:06

{:lol:}如果结构体里面数据比较多,处理起来麻烦,代码好长,如果有什么办法直接可以if()可以知道是单个变量,还是数组

vtte 发表于 2024-1-2 10:05:34

C结构体里面的数据类型和位置都是固定的,为何还要判断类型?一定要判断的话可以通过计算成员指针相对结构体指针的位置来判断。不过要注意字节对齐问题。

dukelec 发表于 2024-1-2 10:19:18

见 C11 新增的关键字 _Generic

https://www.amobbs.com/thread-5741754-1-1.html

lb0857 发表于 2024-1-2 10:31:50

#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");
    }
}

26消费者 发表于 2024-1-2 10:46:31

楼主,能否说下这是要用在啥地方的?为啥要去判断结构体成员数据类型

t3486784401 发表于 2024-1-2 10:57:21

得分情况讨论:

a. 你在源码阶段已有 struct 定义,这之后你用 sizeof、& 都可以判定数据尺寸,进而判断;

b. 你在源码阶段未知 struct 定义,类似于串流过来一个 void* 和 sizeof(packet),需要你动态判断结构体内部数据,
    这种情况在 C 里边无解,因为串流可以翻译成任意的结构体,除非自定协议描述其中数据类型。

初音之恋 发表于 2024-1-2 11:11:42

为什么要判断,指针扎?数据流转结构体吗,序列化反序列化?

xiangran 发表于 2024-1-2 12:34:42

6楼的应该可以,回头试试

Stm32Motor 发表于 2024-1-2 16:41:12

6楼的,我在下keil下试了可以
页: [1]
查看完整版本: 请教一个结构体问题,C语言如何判断结构体成员数据类型