【发布时间】:2011-11-11 15:47:02
【问题描述】:
我需要基于 4 个字符的字符串进行切换。我将字符串放在一个联合中,这样我至少可以将其称为 32 位整数。
union
{
int32u integer;
char string[4];
}software_version;
但现在我不知道在案例陈述中写什么。我需要某种宏来将 4 个字符的字符串文字转换为整数。例如
#define STRING_TO_INTEGER(s) ?? What goes here ??
#define VERSION_2_3_7 STRING_TO_INTEGER("0237")
#define VERSION_2_4_1 STRING_TO_INTEGER("0241")
switch (array[i].software_version.integer)
{
case VERSION_2_3_7:
break;
case VERSION_2_4_1:
break;
}
有没有办法制作 STRING_TO_INTEGER() 宏。或者有没有更好的方法来处理这个开关?
【问题讨论】:
-
您知道这不能跨字节序边界移植吗?最好简单地定义一个版本整数,该整数在程序启动时从数字版本递增或计算。
-
我不认为你可以在编译时从字符串 -> 数字。
-
你为什么坚持用宏将你的
VERSION常量从字符串转换?你可以简单地......你知道......直接输入整数(例如#define VERSION_2_3_7 237)...... -
@SethCarnegie 可以使用
sscanf解析字符串中的整数。 -
另请注意,如果您坚持使用版本的字符数组表示并且想要 4 个字符,则应将结构的字符串元素定义为 5 个字符,其中一个为 NULL。
标签: c string macros switch-statement