【发布时间】:2013-12-30 00:59:58
【问题描述】:
在我的一个项目中,我将当前版本定义为十进制值,看起来像这样:
#define MINOR_VERSION 13
为了能够在要求时输出版本,我需要将十六进制表示形式转换为字符串。目前我正在使用 sprintf(),它基本上看起来像这样:
char buffer[3];
sprintf(buffer, "%2x", MINOR_VERSION);
// output buffer
这有几个缺点,其中之一是增加了代码大小,因为需要包含 sprintf()。此外,该值是在运行时计算的,无论如何这都是浪费精力。这两个问题对我来说都很重要,因为我在这里使用微控制器。
也许我错过了完全显而易见的,但我想不出一个漂亮而干净的宏来为我做转换。原则上,我需要一种在编译期间将13 转换为十六进制表示(2 位,通常没有前面的 0x)0d 的方法。
你有什么建议?
【问题讨论】:
-
这必须是宏吗?你能用一个 constexpr 函数吗?
-
有什么理由必须使用二进制整数吗?你可以只使用一个字符串吗?两者都需要吗?
-
我很困惑——上面没有产生十六进制表示。
-
@razeh:我可能不应该用“c++”标记这个问题,因为实际上我正在使用普通的旧 C。所以,看起来,constexpr 不是一个选项。
-
@Fiddling Bits:“只使用字符串”是什么意思?不确定我是否在关注你...