Kar*_*och 5 c macros hex decimal
在我的一个项目中,我将当前版本定义为十进制值,看起来像这样:
#define MINOR_VERSION 13
Run Code Online (Sandbox Code Playgroud)
为了能够在被要求时输出版本,我需要将十六进制表示形式转换为字符串.目前我正在使用sprintf(),它基本上是这样的:
char buffer[3];
sprintf(buffer, "%2x", MINOR_VERSION);
// output buffer
Run Code Online (Sandbox Code Playgroud)
这有一些缺点,其中一个缺点是代码大小增加,因为需要包含sprintf().此外,值在运行时计算,这无论如何都是浪费的努力.这两个问题对我来说都很重要,因为我在这里使用微控制器.
也许我错过了完全明显的,但我无法想出一个漂亮而干净的宏来为我做转换.原则上我需要一种方法在编译期间转换13为其十六进制表示(2位数,没有通常在前面的0x)0d.
你会建议什么?
我假设您将MINOR_VERSION手动增加。如果是这样,为什么要费劲让宏将其转换为字符串呢。只需在定义中使用二进制和字符串形式的数字即可:
#define MINOR_VERSION_BIN (13)
#define MINOR_VERSION_STR ("D")
Run Code Online (Sandbox Code Playgroud)
我知道您可能会发现这有风险,例如,您可以增加一个而不是另一个,但是,预处理器的功能非常有限。它更适合替换,而不是转换。