字母数字字符串的Ascii值

时间:2018-06-09 22:17:46

标签: shell unix awk sed

你好,无论如何都要获得字母数字字符串的ascii值,而不是一次只读单个字符。 例如,如果我输入A,则输出应为65。 如果我输入Onkar123#。如何计算这个字符串的ascii? 我也想要上面字符串产生的ascii值的总和。

4 个答案:

答案 0 :(得分:1)

echo "test" | hexdump -e '16/1 "%02x " "\n"'替换为test或其他任何内容,尝试使用Onkar123#

答案 1 :(得分:1)

idk你期望什么样的输出,也不知道为什么你关心如果一次处理一个字符串字符串,或者你怎么知道一个给定的工具一次是一个字符(以及如何否则,任何工具都可以做到这一点吗?)如果这是你正在寻找或不寻找的那种答案,那么这可能是个问题,但也许至少可以指出你的方向:

$ printf '%s' "Onkar123#" | awk -l ordchr -v RS='.{1}' '{print ord(RT)}'
79
110
107
97
114
49
50
51
35

以上在ord()库中使用ordchr的GNU awk。

根据您的一条评论,听起来这可能是您正在寻找的内容:

$ printf '%s' "Onkar123#" | awk -l ordchr -v RS='.{1}' '{s+=ord(RT)} END{print s+0}'
692

答案 2 :(得分:0)

<强> OD

确实没有字符串的 ASCII值。但 是字符串中每个ASCII字符的十进制(或八进制或十六进制)值。

由于您似乎没有hexdump,请尝试使用od(八进制转储)实用程序。我不认为我曾见过没有od的* nix系统。

$ echo "Onkar123#" | od -An -t d1 
79  110  107   97  114   49   50   51   35   10

我想终结可能会发挥作用。但是od有一个--endian参数。

<强> AWK

在awk中要困难得多。我认为你必须构建一个查找表,然后查找输入中每个字符的十进制代码。这意味着你仍然需要一次处理一个角色。

# output-decimal-ascii.awk -- write ASCII decimal codes for input
BEGIN {
    # 127 for ASCII; 256 for extended ASCII
    for(n = 0; n < 127; n++) {
        ascii_table[sprintf("%c",n)] = n
    }
}
{
    split($0, arr, "")
    for (i = 1; i <= length(arr); i++) {
        printf("%d ", ascii_table[arr[i]])
    }
    print "\n"
}
$ echo "Onkar123#" | awk -f code/awk/output-decimal-ascii.awk
79 110 107 97 114 49 50 51 35 

答案 3 :(得分:0)

总结数字使用:

echo "test" | od -An -t d1 | xargs | sed "s/ /+/g" | bc