如何增加文件中的十六进制数

Howto increment a hex number within a file

一个常见的 CI 构建类型问题,我有一个 header 有一个版本号,我想在构建之前增加它。

所以test.h

#define VERSION_PROJECT_MAJOR   01
#define VERSION_PROJECT_MINOR   69
#define VERSION_VENDOR          2

需要获得次要版本的 6A。

环境是 DOS/WIN,带有 gnu utils,所以我认为 awk 是可行的方法,但我不能完全旋转它。构建系统的版本不能就地执行,但我可以接受。

到目前为止,我的成绩还不错one-liner;

awk  "/#define VERSION_PROJECT_MINOR/{[=11=]= \" \"  \"   \" (strtonum(\"0x\" )+1)}1;" test.h

这里设置版本号为106,如何让它输出十六进制???

使用 GNU awk 的 non-decimal-data flag:

只需转换为十进制,执行加法,然后再转换回十六进制:

awk --non-decimal-data '/MINOR/ {
           =sprintf("%d", "0x"); =sprintf("%x",+1)
          }
          1' file

你的文件:

$ awk --non-decimal-data '/MINOR/ {=sprintf("%d", "0x"); =sprintf("%x",+1)}1' file
#define VERSION_PROJECT_MAJOR   01
#define VERSION_PROJECT_MINOR 6a
#define VERSION_VENDOR          2

这使用 %x in printf returns 六进制的十进制值这一事实。

$ awk --non-decimal-data 'BEGIN{printf "%d\n", 0x69}'
105