Как я могу преобразовать десятичное число в шестнадцатеричное в VIM? - PullRequest
19 голосов
/ 13 июля 2009

У меня есть этот столбец в файле, который я редактирую в VIM:

16128
16132
16136
16140
# etc...

И я хочу преобразовать это в этот столбец:

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

Как я могу сделать это в VIM?

Ответы [ 5 ]

38 голосов
/ 13 июля 2009

Используйте 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
6 голосов
/ 13 июля 2009

Еще один способ:

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

Или:

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

Это немного меньше ввода, и вы избегаете уровня цитирования / экранирования, который вы получили бы, если бы сделали это через :!. Вам нужна поддержка Perl / Ruby, скомпилированная в Vim.

5 голосов
/ 13 июля 2009

другой способ передать его в awk

awk '{printf "0x%x\n",$1}' file
4 голосов
/ 13 июля 2009

Выберите (VISUAL) блок строк, содержащий цифры, а затем:

:!perl -ne 'printf "0x\%x\n", $_'
1 голос
/ 24 июля 2015

Чтобы преобразовать десятичное число в шестнадцатеричное, используйте команду

:echo printf("%x", decimal)

В результате отображается шестнадцатеричный эквивалент десятичного числа.

Пример:

:echo printf("%x", 61444)

f004 (эквивалент 61444) отображается.

Не найдет и не заменит 61444 в файле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...