我有这样一句话:
pad(2)= 0x0041
我想将十六进制更改为十进制,预期结果为
pad(2)= 65
我刚试过:%s/\(.*\) = \(.*\)/\1 = \=printf("%d", submatch(2))
,但失败了。
你能帮忙解决这个问题吗?
答案 0 :(得分:10)
Vim有一个str2nr()
函数可以将不同的数字表示转换为十进制值。要转换十六进制值,您可以像这样使用它:
s/0x[0-9a-fA-F]\+/\=str2nr(submatch(0), 16)
答案 1 :(得分:2)
您的代码几乎没问题,但是,根据文档:
当替换字符串以“\ =”开始时,余数被解释为 表达。这不起作用:里面有一个substitute()函数 表达式不能使用“\ =”作为替换字符串。
因此,您可以将代码更改为
%s/\(.*\) = \(.*\)/\=submatch(1)." = ".printf("%d", submatch(2))