如何使用长度为 4 的 char 数组(字符串文字)来表示 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
是一些合适的、不言自明的名称。它可以是#define
、const
或enum
。
至于如何从 4 个字符的字符串转换为 int
,有多种原因导致您不能简单地执行 *(int*)"\x0ATst"
(对齐、严格别名)。有一个解决方法,即使用 union :
typedef union
{
char str[4];
unsigned int val;
} conv_t;
...
(conv_t){.str = "\x0ATst" }.val
请注意,此代码严重依赖于 CPU 字节顺序,因此它仍然不是很好的做法。
关于c - 4 字节字符数组到要在 C 中的 `case` 语句中使用的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56790214/