我想写一个函数,它将接受一个表示十六进制数字的字符串并将其转换为整数,我想将十六进制数字放在枚举中,但是当我使用枚举中的一个元素时,我得到一个错误在编译时。
以下是代码:
#include <stdio.h>
int htoi (char h[]);
enum HexDigits {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F};
int main () {
enum HexDigits h = 9;
return 0;
}
int htoi (char h[]) {
}
这是我得到的错误:
C:\ Users \ KiKo-SaMa \ Desktop \ C&gt; gcc hello.c -o hello
hello.c:4:17:错误:数字常量之前的预期标识符
我正在做的事情可能是什么问题?
答案 0 :(得分:4)
枚举的作用是将符号名称分配给本质上是一个整数,默认情况下从索引0开始。例如;
enum BoolValue { FALSE, UNKNOWN, TRUE };
基本上做了接近的事情;
const int FALSE = 0;
const int UNKNOWN = 1;
const int TRUE = 2;
你的问题是你试图将数字放在你的枚举而不是符号名称中,如果你把它重写为实际上它会产生错误是有道理的;
const int 0 = 0;
const int 1 = 1;
...等。
我不确定枚举是否是您要解决的问题的解决方案。
答案 1 :(得分:4)
答案 2 :(得分:3)
必须命名枚举成员,并且不允许他们的姓名(与任何其他名称一样)以数字开头。如果你想使用数字,你必须在前面添加一些东西,例如字母或下划线(例如H0
或_0
)。
另外,作为一个额外的建议,只需将有效字符添加到字符串中然后使用strchr()
进行转换就容易多了:
const char *hexchars = "0123456789ABCDEF";
// this takes a single hex character and returns its decimal representation (or -1 in case of an invalid character)
int hex_to_dec(char h) { return strchr(hexchars, h) ? strchr(hexchars, h) - hexchars : -1; }
另请注意,您也可以使用数字常量的十六进制表示形式:0x0
,0x1
,... 0xF
。
答案 3 :(得分:2)
使用strtol()
转换任意数字的字符串2-36。
strtol(const char *nptr, char **endptr, int base)
基数0是一种特殊情况,它接受基数为16的“0x”前缀,8为“0”前缀,10为无前缀。
char a[5]="0x0a";
char b[3]="0b";
printf ("%li\n",strtol(a,NULL,0));
printf ("%li\n",strtol(b,NULL,16));
有关错误检查的更长示例,请参阅man page。
答案 4 :(得分:1)
enum HexDigits h = 9; // assigning numerical 9 or enum variable
在这种情况下,9可以作为数字9和枚举HexDigits中的'9'。
枚举定义中使用的变量应遵循语言的变量命名约定。仅允许有效的变量名称。
但你为什么要定义枚举? c ++本身不支持十六进制数字吗?
查看enum