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 名称。它可以是 #defineconstenum.

至于如何将 4 个字符的字符串转换为 int,有多种原因导致您不能简单地执行 *(int*)"\x0ATst"(对齐、严格别名)。通过使用联合,有一个 work-around:

typedef union
{
  char str[4];
  unsigned int val;
} conv_t;

...

(conv_t){.str = "\x0ATst" }.val

请注意,此代码在很大程度上取决于 CPU 字节序,因此它仍然不是很好的做法。