Как преобразовать десятичное число в hex в VIM?
У меня есть этот столбец в файле, который я редактирую в VIM:
16128
16132
16136
16140
# etc...
И я хочу преобразовать его в этот столбец:
0x3f00
0x3f04
0x3f08
0x3f0c
# etc...
Как я могу сделать это в VIM?
Ответы
Ответ 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 в файле.