我使用了一些常量,我需要在代码中排除幻数,例如:
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最好是内置此功能
如果常量可以设为 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);