Опять же, я довольно новичок в C, поэтому прости простоту / глупость этого вопроса. Во всяком случае, здесь это идет. Каков наилучший способ #define 2-байтового макроса (то есть #define MSGID 0xABCD) в C, который легко поместить в байтовый массив, но также сравнить содержимое с операторами if?
Чтобы прояснить это, снова возьмите пример 0xABCD. Скажи, что я хочу сделать:
unsigned char test_msg[] = { 0x00, 0x01, 0x02, MSGID, 0x03, 0x04, 0x05 };
С тем, как я определил это выше, он не будет работать, потому что он определен как большой int и gcc усекает его до беззнакового типа. Когда я определяю его как #define MSGID 0xAB, 0xCD, кажется, что он работает нормально, но я не понимаю, что делает запятая, и это выглядит не очень чисто. Я обнаружил, что другой вариант, который работает, но не является чистым, - это разделить его как #define MSGIDCLASS 0xAB, а затем #define MSGID 0xCD.
Я также хотел бы сравнить эти байты MSGID, и в данный момент мне приходится постоянно делать if (data [n] == MSGIDCLASS && data [n + 1] == MSGID) ... для каждого сообщения Мне нужно разобрать и ответить. Мне было интересно, есть ли более простой способ сделать это, вот и все. Если нет, я оставлю это как есть. Спасибо еще раз за помощь. Приносим извинения за то, что не использовал теги примеров кода, не думал, что они были необходимы с одним вкладышем.