Como substituo um caractere pelo seu valor hexadecimal?

8

Eu quero substituir um caractere com seu literal hexadecimal. Por exemplo, antes da regex:

h

Após regex:

0x68

Estou tentando isso:

s/\([a-z]\)/\=printf("%#02x", submatch(0))/

Mas isso substitui-o por

00

O que estou fazendo errado? Isso é possível?

James
fonte

Respostas:

10

Dessa forma, printfespera que um número decimal seja convertido em um hexadecimal. Tudo o que você precisa fazer é converter o caractere em um número da seguinte maneira:

s/\([a-z]\)/\=printf("%#02x", char2nr(submatch(0)))/

Veja :help char2nr()para detalhes.

Jair López
fonte