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

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

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


不:

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


由于主要代码更易于阅读。

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

最佳答案

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的耐久性,因此它仍然不是很好的做法。

07-24 09:46
查看更多