gpt4 book ai didi

c - 在c (keil v5)uvision中通过字符串初始化枚举

转载 作者:行者123 更新时间:2023-11-30 15:07:47 29 4
gpt4 key购买 nike

我使用这些代码从 uart 接收字符串,然后将它们与此枚举匹配,然后将它们放在 switch-case 上。

char temp[3],rx_buf[100];
enum form {
GGA = 1,
GSA
};
enum form gnssform ;

sprintf(temp,"%c%c%c",rx_buf[3],rx_buf[4],rx_buf[5]);
gnssform=temp;

我不明白我们可以直接使用示例:

gnssform=GSA;

并且没有错误,但是这个:

gnssform=temp;

不编译。请告诉我可能的方法来做到这一点???,因为这个例子我相信它一定是可能的。错误是:

“char *”类型的值不能分配给“enum form”类型的实体

请不要告诉我使用 if-else,因为我讨厌那样。

最后我用了

if(rx_buf[3]=='G'&&rx_buf[4]=='G'&&rx_buf[5]=='A')gnssform=GGA; 
else if(rx_buf[3]=='G'&&rx_buf[4]=='S'&&rx_buf[5]=='A')gnssform=GSA;

最佳答案

没有内置的解决方案。最简单的方法是使用 char* 数组,其中枚举的 int 值索引到包含该枚举的描述性名称的字符串。

enum FRUIT_ENUM {
apple, orange, grape, banana,
};

static const char *FRUIT_STRING[] = {
"apple", "orange", "grape", "banana",
};

然后你可以在循环中执行如下操作。

if (!strcmp(FRUIT_STRING[n],temp)) 
gnssform=n;

关于c - 在c (keil v5)uvision中通过字符串初始化枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37948723/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com