switch
работает только с целочисленными константами, поэтому он не очень гибкий.Вы не можете использовать case
с выражениями, строками или с любым другим типом, кроме int
.
Но в этом случае это не имеет значения, потому что у вас не должно быть ни одной формы, потому что ни одно из них не являетсяочень читабельноВместо этого используйте case STAMP:
, где STAMP
- какое-то подходящее, самоочевидное имя.Это может быть #define
, const
или enum
.
Что касается того, как преобразовать 4-символьную строку в int
, существуют различные причины, по которым вы не можете просто сделать *(int*)"\x0ATst"
(выравнивание, строгое наложение).Для этого есть обходной путь, использующий объединение:
typedef union
{
char str[4];
unsigned int val;
} conv_t;
...
(conv_t){.str = "\x0ATst" }.val
Обратите внимание, что этот код в значительной степени зависит от состояния процессора, поэтому это все еще не очень хорошая практика.