4 字节 char 数组到整数,用于 C 中的 `case` 语句
4 byte char array to an integer to be used in `case` statement in C
如何使用长度为 4(字符串文字)的字符数组来表示 4 字节整数?
我想用一个长度为 4 的字符串文字来代替一个 4 字节的整数,这个整数将在这个 case 语句中使用。
我想这样写:
case "\x0ATst":
printf("FOUND TIME STAMP");
break;
不是:
case 0x7473540A:
printf("FOUND TIME STAMP");
break;
因为主要代码更易于阅读。
我在 google 上搜索了 "string to int",但只找到了像 atoi()
这样的答案。
switch
只适用于整数常量,所以它一点也不灵活。您不能将 case
与表达式、字符串一起使用,也不能与 int
.
以外的任何其他类型一起使用
但在这种情况下没关系,因为你不应该有任何一种形式,因为它们都不是很可读的。而是使用 case STAMP:
,其中 STAMP
是一些合适的 self-explaining 名称。它可以是 #define
、const
或 enum
.
至于如何将 4 个字符的字符串转换为 int
,有多种原因导致您不能简单地执行 *(int*)"\x0ATst"
(对齐、严格别名)。通过使用联合,有一个 work-around:
typedef union
{
char str[4];
unsigned int val;
} conv_t;
...
(conv_t){.str = "\x0ATst" }.val
请注意,此代码在很大程度上取决于 CPU 字节序,因此它仍然不是很好的做法。
如何使用长度为 4(字符串文字)的字符数组来表示 4 字节整数?
我想用一个长度为 4 的字符串文字来代替一个 4 字节的整数,这个整数将在这个 case 语句中使用。 我想这样写:
case "\x0ATst":
printf("FOUND TIME STAMP");
break;
不是:
case 0x7473540A:
printf("FOUND TIME STAMP");
break;
因为主要代码更易于阅读。
我在 google 上搜索了 "string to int",但只找到了像 atoi()
这样的答案。
switch
只适用于整数常量,所以它一点也不灵活。您不能将 case
与表达式、字符串一起使用,也不能与 int
.
但在这种情况下没关系,因为你不应该有任何一种形式,因为它们都不是很可读的。而是使用 case STAMP:
,其中 STAMP
是一些合适的 self-explaining 名称。它可以是 #define
、const
或 enum
.
至于如何将 4 个字符的字符串转换为 int
,有多种原因导致您不能简单地执行 *(int*)"\x0ATst"
(对齐、严格别名)。通过使用联合,有一个 work-around:
typedef union
{
char str[4];
unsigned int val;
} conv_t;
...
(conv_t){.str = "\x0ATst" }.val
请注意,此代码在很大程度上取决于 CPU 字节序,因此它仍然不是很好的做法。