Подтвердить что ты не робот

Как преобразовать десятичное число в hex в VIM?

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

16128
16132
16136
16140
# etc...

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

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

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

4b9b3361

Ответ 1

Используйте 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

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

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

Или:

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

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

Ответ 3

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

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

Ответ 4

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

:!perl -ne 'printf "0x\%x\n", $_'

Ответ 5

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

:echo printf("%x", decimal)

Это приводит к отображению шестнадцатеричного эквивалента десятичного числа.

Пример:

:echo printf("%x", 61444)

f004 (эквивалент 61444).

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