Как преобразовать шестнадцатеричное в десятичное в операторе подстановки? - PullRequest
7 голосов
/ 07 июня 2010

У меня есть такая строка:

pad (2) = 0x0041

Я хочу изменить гекс на десятичный, и ожидаемый результат будет

pad (2) = 65

Я только что попробовал :%s/\(.*\) = \(.*\)/\1 = \=printf("%d", submatch(2)), но это не удалось.

Не могли бы вы помочь решить эту проблему?

Ответы [ 2 ]

10 голосов
/ 07 июня 2010

Vim имеет функцию str2nr() для преобразования различных числовых представлений в их десятичные значения. Для преобразования шестнадцатеричных значений вы можете использовать его следующим образом:

s/0x[0-9a-fA-F]\+/\=str2nr(submatch(0), 16)
2 голосов
/ 07 июня 2010

Ваш код почти в порядке, но, согласно документации:

Когда замещающая строка начинается с "\ =", остаток интерпретируется как выражение.Это не работает рекурсивно: функция substitute () внутри выражения не может использовать «\ =» для строки замены.

Итак, вы можете изменить свой код на

%s/\(.*\) = \(.*\)/\=submatch(1)." = ".printf("%d", submatch(2))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...