Come posso sostituire un personaggio con il suo valore esadecimale?


8

Voglio sostituire un personaggio con il suo valore letterale esadecimale. Ad esempio prima di regex:

h

Dopo regex:

0x68

Sto provando questo:

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

Ma questo lo sostituisce con

00

Che cosa sto facendo di sbagliato? È possibile?

Risposte:


10

In tal modo, si printfaspetta che un numero decimale venga convertito in uno esadecimale. Tutto quello che devi fare è convertire il personaggio in un numero come segue:

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

Vedi :help char2nr()per i dettagli.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.