¿Cómo reemplazo un personaje con su valor hexadecimal?

8

Quiero reemplazar un personaje con su literal hexadecimal. Por ejemplo antes de regex:

h

Después de la expresión regular:

0x68

Estoy intentando esto:

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

Pero esto lo reemplaza con

00

¿Qué estoy haciendo mal? ¿Es esto posible?

James
fuente

Respuestas:

10

De esa manera, printfespera que un número decimal se convierta en hexadecimal. Todo lo que necesita hacer es convertir el carácter a un número de la siguiente manera:

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

Ver :help char2nr()para más detalles.

Jair López
fuente