将 ascii 字符转换为 ascii 十六进制表示形式

将 ascii 字符转换为 ascii 十六进制表示形式

如何在 AWK 脚本中将 ASCII 字符转换为 ASCII HEX?

我想要按字母范围循环

例子

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

注意:我想要按十六进制表示的范围循环并打印字符。

答案1

我觉得你真的不需要全部那些角色...

$ 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

答案2

建立一个包含所有 ASCII 字符的表,并使用 awk 内置命令index()查找表中的字符。然后使用sprintf()将返回的十进制值转换index()为十六进制。

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("!");
}

将此代码放入文件“foo”并运行awk -f foo < /dev/null,您将看到以十六进制打印的“a”、“A”和“!”的 ASCII 值。

答案3

awk 没有像 python 那样的 ord()、chr() 函数。您必须首先在 BEGIN 块中创建数组,其索引是 ascii 字符,值是十进制数。

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

相关内容