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

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

клавиатура (2) = 0x0041

Я хочу изменить шестнадцатеричное число в десятичное число, и ожидаемый результат

клавиатура (2) = 65

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

Вы помогли бы решить это?

7
задан sth 7 June 2010 в 11:55
поделиться

2 ответа

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

s/0x[0-9a-fA-F]\+/\=str2nr(submatch(0), 16)
10
ответ дан 6 December 2019 в 21:10
поделиться

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

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

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

%s/\(.*\) = \(.*\)/\=submatch(1)." = ".printf("%d", submatch(2))
2
ответ дан 6 December 2019 в 21:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: