Konvertieren Sie ein ASCII-Zeichen in eine ASCII-Hexadezimaldarstellung

Konvertieren Sie ein ASCII-Zeichen in eine ASCII-Hexadezimaldarstellung

Wie konvertiere ich ein ASCII-Zeichen in einem AWK-Skript in ASCII HEX?

Ich möchte eine Schleife durch einen Buchstabenbereich

Beispiel

for(i="a"; i<"g"; i++)
 print i;

HINWEIS: Ich möchte eine Schleife durch einen Bereich aus der Hex-Darstellung erstellen und das Zeichen drucken.

Antwort1

Klingt für mich, als ob Sie nicht wirklich brauchenalledie Charaktere...

$ awk 'BEGIN { chartable="abcdefghij" ; for (i=index(chartable, "a"); i<index(chartable, "g"); i++) { print substr(chartable, i, 1) } }'
a
b
c
d
e
f

Antwort2

Erstellen Sie eine Tabelle mit allen ASCII-Zeichen und verwenden Sie das integrierte awk, index()um Zeichen in der Tabelle nachzuschlagen. Verwenden Sie dann, sprintf()um den zurückgegebenen Dezimalwert index()in Hex umzuwandeln.

BEGIN {
    for (i = 0; i < 128; i++) {
       table = sprintf("%s%c", table, i);
    }
}

function chartohex (char) {
    return sprintf("0x%x", index(table, char));
}

END { # examples
   print chartohex("a");
   print chartohex("A");
   print chartohex("!");
}

Fügen Sie diesen Code in die Datei „foo“ ein und führen Sie ihn aus. awk -f foo < /dev/nullDann sehen Sie die ASCII-Werte für „a“, „A“ und „!“ in hexadezimaler Schreibweise ausgegeben.

Antwort3

awk hat nicht die Funktionen ord() und chr() wie Python. Sie müssen zuerst ein Array im BEGIN-Block erstellen, dessen Index ein ASCII-Zeichen und dessen Wert eine Dezimalzahl ist.

awk 'BEGIN {
 for (i = 0; i <= 255; i++) {
    t = sprintf("%c", i)
    a[t] = i
}

for( i=a["a"]; i < a["g"]; i++)
    print sprintf("%c",i)
}'
a
b
c
d
e
f

verwandte Informationen