在c(keil v5)uvision中通过字符串初始化枚举
Initialize enum by string in c (keil v5)uvision
我正在使用这些代码从 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;
GSA
是enum form
的常量值。
temp
是指向三个字母 '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;
我正在使用这些代码从 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;
GSA
是enum form
的常量值。
temp
是指向三个字母 '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;