Wie ersetze ich ein Zeichen durch seinen Hex-Wert?

8

Ich möchte ein Zeichen durch sein Hex-Literal ersetzen. Zum Beispiel vor Regex:

h

Nach Regex:

0x68

Ich versuche das:

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

Aber das ersetzt es durch

00

Was mache ich falsch? Ist das überhaupt möglich?

James
quelle

Antworten:

10

Auf diese Weise wird printferwartet , dass eine Dezimalzahl in eine hexadezimale Zahl umgewandelt wird. Alles was Sie tun müssen, ist das Zeichen wie folgt in eine Zahl umzuwandeln:

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

Siehe :help char2nr()für Details.

Jair López
quelle