4-байтовый массив символов в целое число для использования в операторе `case` в C - PullRequest
0 голосов
/ 27 июня 2019

Как я могу использовать массив символов длиной 4 (который является строковым литералом) для представления 4-байтового целого числа?

Я хочу использовать строковый литерал длиной 4 для замены 4-байтового целого числа, котороедолжен использоваться в этом случае заявления.Я хочу написать так:

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

not:

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

Поскольку основной код более читабелен для человека.

Я искал "string to int" вGoogle, но были найдены только ответы типа atoi().

1 Ответ

0 голосов
/ 27 июня 2019

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

Обратите внимание, что этот код в значительной степени зависит от состояния процессора, поэтому это все еще не очень хорошая практика.

...