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?

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.