4字节char数组为整数,将在C的case语句中使用

时间:2019-06-27 11:40:16

标签: c switch-statement byte literals

如何使用长度为4的char数组(它是字符串文字)来表示4字节整数?

我想使用长度为4的字符串文字来替代4字节整数,该整数将在本案例中使用。 我想这样写:

case "\x0ATst":
    printf("FOUND TIME STAMP");
    break;

不是:

case 0x7473540A:
    printf("FOUND TIME STAMP");
    break;

主要代码更具可读性。

我在Google上搜索了“将字符串转换为整数”,但仅找到了atoi()之类的答案。

1 个答案:

答案 0 :(得分:0)

switch仅适用于整数常量,因此根本不够灵活。您不能将case与表达式,字符串或int以外的任何其他类型一起使用。

但是在这种情况下,这并不重要,因为您都不应该使用任何形式,因为它们都不易读。而是使用case STAMP:,其中STAMP是一些合适的,不言自明的名称。可以是#defineconstenum

关于如何从4字符串转换为int,有多种原因导致您不能简单地执行*(int*)"\x0ATst"(对齐,严格的别名)。有一个解决方法,可以使用联合:

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

...

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

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