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?

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.