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

时间:2016-06-21 15:33:33

标签: c arrays enums keil

我使用这些代码从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;

我无法理解我们可以直接使用例如EXAMPLE:

gnssform=GSA;

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

gnssform=temp;

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

类型" char *"的值不能分配给类型"枚举形式"

的实体

请不要告诉我使用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;

2 个答案:

答案 0 :(得分:1)

没有内置解决方案。最简单的方法是使用char *数组,其中enum的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;

答案 1 :(得分:0)

GSAenum form的常量值。

temp是指向三个字母' GSA'的字母指针。

它们不是同一个东西,你不能直接分配它们。