Wie kann ich umwandeln einer Dezimalzahl in hex in VIM?
Habe ich diese Spalte in einer Datei ich editieren in VIM:
16128
16132
16136
16140
# etc...
Und ich wollen, es zu konvertieren, um diese Spalte:
0x3f00
0x3f04
0x3f08
0x3f0c
# etc...
Wie kann ich das in VIM?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
printf
(Analog zu Csprintf
) mit der\=
Befehl zum behandeln des Ersatz:Details:
:%s/\d\+/
: Mit ein oder mehr Ziffern (\d\+
) auf jeder Linie (:%
) und Stellvertreter (s
).\=
: für jedes match, ersetzen Sie mit dem Ergebnis des folgenden Ausdrucks:printf("0x%04x",
: erstellen Sie ein string mit dem format"0x%04x"
, das entspricht einem literal0x
gefolgt von einer vierstelligen (oder mehrere) hex-Zahl, mit Nullen aufgefüllt.submatch(0)
: Das Ergebnis das gesamte Spiel (also die Zahl).Weitere Informationen finden Sie unter:
s/-\?\d\+/\=printf("0x%08x", submatch(0))
und entfernen Sie die zusätzlichen0xffff
s wie gewünscht: zBs/0xffffffff/0x
für 32bit.Noch einen anderen Weg:
Oder:
Dies ist ein bisschen weniger Tipparbeit und vermeiden Sie eine Ebene zitieren /shell escaping, dass Sie erhalten würde, wenn Sie Tat dies über
:!
. Sie benötigen Perl /Ruby-Unterstützung einkompiliert Vim.einen anderen Weg, um es zu übergeben, um awk
Auswählen (VISUAL) die Sperrung der Linien, die die zahlen enthält, die, und dann:
Konvertieren von dezimal in hexadezimal, verwenden Sie den Befehl
Diese Ergebnisse in hexadezimal entspricht dezimal angezeigt wird.
Beispiel:
f004 (äquivalent 61444) wird angezeigt.
Diese nicht finden und ersetzen 61444 in der Datei.