C++ uint16_t 到十六进制

问题描述 投票:0回答:1

我使用了一些常量,我需要在代码中排除幻数,例如:

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最好是内置此功能

c++ hex
1个回答
0
投票

如果常量可以设为 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);
© www.soinside.com 2019 - 2024. All rights reserved.