Я использую некоторые константы, и мне нужно исключить в моем коде магические числа, например:
static const uint16_t val = 0x7076
static const uint16_t val_tag = 7076
....
Поэтому я должен объявить выше static uint16_t MAGIC_NUMBER_VAL = 7076 и использовать это здесь:
static const uint16_t val = convert_func(MAGIC_NUMBER_VAL); //0x7076
static const uint16_t val_tag = MAGIC_NUMBER_VAL;
Как лучше всего преобразовать uint в шестнадцатеричный? Каким будет Convert_func?
p.s желательно, чтобы эта функция была встроена
@Элджей Нет.
#define MAGIC_NUMBER_VAL 7076#define convert_func(NUM) hexify(NUM)#define hexify(NUM) 0x ## NUM@MikeCAT магическое число тоже должно быть макросом: ideone.com/TwXRUi
Если константу можно сделать constexpr, вы можете просто написать функцию constexpr для «преобразования» (godbolt.org/z/xr33zGf8E)
@gan_ спасибо! это ответ! не могли бы вы поделиться этим здесь?





Если вашу константу можно сделать constexpr, вы можете просто написать функцию constexpr для выполнения «преобразования».
constexpr uint16_t convert_func(uint16_t x) {
uint16_t acc = 0;
int p10 = 1;
int p16 = 1;
for(int i = 0; i != 5; ++i) {
acc += ((x / p10) % 10) * p16;
p10 *= 10;
p16 *= 16;
}
return acc;
}
static constexpr uint16_t MAGIC_NUMBER_VAL = 7076;
static constexpr uint16_t val = convert_func(MAGIC_NUMBER_VAL);
static constexpr uint16_t val_tag = MAGIC_NUMBER_VAL;
static_assert(val == 0x7076);
@Eljay Это не работает.