Вы не можете сделать это, потому что препроцессор ничего не знает о языке C, поэтому он не может выполнить оценку.
Я вижу два варианта получения желаемого результата:
Ручная оценка
Напишите свои уровни в точности так, как вы хотите, чтобы они отображались, и используйте один оператор stringizer:
#define LEVEL1 0x0000
#define LEVEL2 0x0001
#define STRING(x) # x
strncpy(str, STRING(LEVEL2), len);
Недостатком является то, что это подвержено ошибкам и может противоречить местным правилам кодирования.
Оценка времени выполнения
Используйте одну из функций форматирования строки sprintf
или snprintf
.
#define LEVEL1 0x0000
#define LEVEL2 0x0001
char level[7];
snprintf(level, sizeof level, "%#06x", LEVEL2);
strncpy(str, level, len);
Это накладные расходы времени выполнения, которых вы хотели избежать.