Comment remplacer un personnage par sa valeur hexadécimale?

8

Je veux remplacer un caractère par son littéral hexadécimal. Par exemple, avant l'expression régulière:

h

Après l'expression régulière:

0x68

J'essaye ceci:

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

Mais cela le remplace par

00

Qu'est-ce que je fais mal? Est-ce seulement possible?

James
la source

Réponses:

10

De cette façon, printfattend un nombre décimal à convertir en un nombre hexadécimal. Il vous suffit de convertir le caractère en nombre comme suit:

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

Voir :help char2nr()pour plus de détails.

Jair López
la source