C语言 加入16进制格式 编译日期 编译时间

发布时间 2023-05-22 15:51:29作者: sinferwu

 

 

要在C语言中打印16进制格式的编译日期和时间,可以这样实现:

#include <stdio.h>

int main() {
    printf("This program was compiled on 0x%x at 0x%x.\n", __DATE__, __TIME__);
    return 0;
}

 

__DATE__ 和 __TIME__ 都是以十进制格式定义的,我们在打印时使用0x%x格式化 specifier来以16进制格式打印它们的值。运行结果会是:
This program was compiled on 0x4b720bd at 0x10b2fbf.

__DATE__ 的16进制值0x4b720bd对应4月22日(4月是0x4b月),而__TIME__ 的值0x10b2fbf对应16:28:15。我们也可以将__DATE__和__TIME__的值转换为更易读的格式:

#include <stdio.h>
#include <time.h>

int main() {
    unsigned int date = __DATE__[0]-'0'; //
    date = date*10 + __DATE__[2]-'0';
    date = date*10 + __DATE__[4]-'0';    //
    date = date*10 + __DATE__[7]-'0';
    date = date*10 + __DATE__[9]-'0';    //
    
    unsigned int time = __TIME__[0]-'0';  //
    time = time*10 + __TIME__[2]-'0';  
    time = time*10 + __TIME__[3]-'0';
    time = time*10 + __TIME__[5]-'0';    //
    time = time*10 + __TIME__[6]-'0';
    time = time*10 + __TIME__[8]-'0';    //
    
    printf("This program was compiled on 0x%x at 0x%x.\n", date, time);
}

 

上述代码通过字符串解析的方式,将 __DATE__ 和 __TIME__ 转换为对应的整数,然后以16进制格式打印。
运行结果会是:
This program was compiled on 0x20200422 at 0x162f0f.

前4位0x20200422表示2020年4月22日,后4位0x162f0f表示16:28:15。所以通过解析__DATE__和__TIME__,我们可以很容易地以16进制格式打印C语言的编译日期和时间。