С++ uint16_t в шестнадцатеричный код

Я использую некоторые константы, и мне нужно исключить в моем коде магические числа, например:

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 желательно, чтобы эта функция была встроена

@Eljay Это не работает.

MikeCAT 13.03.2024 14:11

@Элджей Нет.

MikeCAT 13.03.2024 14:14
#define MAGIC_NUMBER_VAL 7076#define convert_func(NUM) hexify(NUM)#define hexify(NUM) 0x ## NUM
Eljay 13.03.2024 14:15

@MikeCAT магическое число тоже должно быть макросом: ideone.com/TwXRUi

asdfldsfdfjjfddjf 13.03.2024 15:01

Если константу можно сделать constexpr, вы можете просто написать функцию constexpr для «преобразования» (godbolt.org/z/xr33zGf8E)

gan_ 13.03.2024 15:06

@gan_ спасибо! это ответ! не могли бы вы поделиться этим здесь?

Максим 13.03.2024 15:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
6
85
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вашу константу можно сделать 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);

Другие вопросы по теме

Переход между шестнадцатеричными байтами и строками
Рассчитать шестнадцатеричный цвет с прозрачностью на основе других цветов
В чем разница между шестнадцатеричной декодированной строкой и string.as_bytes()?
Допустим, у меня есть две кнопки: кнопка A и кнопка B. Мне это нужно, чтобы, если я нажму B, она будет циклически перебирать разные значения, а нажатие A будет их печатать
Как я могу преобразовать/сгладить 8-значный шестнадцатеричный цвет (альфа) в 6-значный шестнадцатеричный цвет, который учитывает альфу (при условии белого фона)?
Чтение закрытого ключа в формате HEX обратно в OpenSSL
Разбор длинной шестнадцатеричной строки на отдельные байты и сохранение ее в std::vector<unit_8>
Программное изменение оттенка с вращением шестнадцатеричного цвета в PowerShell
Не удается преобразовать значение (не столбец) из HEX в Base64
Как печатать шестнадцатеричные значения в формате «0x» в C