当前位置:  开发笔记 > 编程语言 > 正文

如何在VIM中将十进制数转换为十六进制?

如何解决《如何在VIM中将十进制数转换为十六进制?》经验,为你挑选了3个好方法。

我在VIM中编辑的文件中有此列:

16128
16132
16136
16140
# etc...

我想将其转换为此列:

0x3f00
0x3f04
0x3f08
0x3f0c
# etc...

我怎样才能在VIM中做到这一点?



1> DrAl..:

使用printf(类似于C的sprintf)\=命令来处理替换:

:%s/\d\+/\=printf("0x%04x", submatch(0))

细节:

:%s/\d\+/:匹配\d\+任何行(:%)上的一个或多个数字()并替换(s).

\= :对于每个匹配,替换为以下表达式的结果:

printf("0x%04x",:使用格式生成一个字符串,该格式"0x%04x"对应于文字0x后跟四位(或更多)十六进制数字,用零填充.

submatch(0) :完全匹配的结果(即数字).

有关更多信息,请参阅:

:help printf()
:help submatch()
:help sub-replace-special
:help :s



2> Brian Carper..:

另一种方式:

:rubydo $_ = '0x%x' % $_

要么:

:perldo $_ = sprintf '0x%x', $_

这样可以减少输入,并且如果你通过这样做,你可以避免一定程度的引用/ shell转义:!.您需要将Perl/Ruby支持编译到您的Vim中.



3> ghostdog74..:

另一种方式,将它传递给awk

awk '{printf "0x%x\n",$1}' file

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有