Ascii значение буквенно-цифровой строки - PullRequest
0 голосов
/ 10 июня 2018

Привет, есть ли в любом случае значение ascii для буквенно-цифровой строки без чтения по одному символу за раз.Например, если я ввожу A, вывод должен быть 65. Если я ввожу Onkar123 #.Как рассчитать ascii этой строки?Также мне нужна сумма значения ascii, полученного из приведенной выше строки.

Ответы [ 3 ]

0 голосов
/ 10 июня 2018

od

В действительности нет такой вещи как значение ASCII строки. есть такая вещь, как десятичное (или восьмеричное, или шестнадцатеричное) значение каждого символа ASCII в строке.

Поскольку у вас, похоже, нет hexdump, попробуйте утилиту od (восьмеричный дамп).Я не думаю, что когда-либо видел систему * nix, в которой не было od.

$ 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 
0 голосов
/ 10 июня 2018

Я не знаю, какой вывод вы ожидаете, и я не знаю, почему вас волнует, обрабатывается ли строка по одному символу за раз или как вы узнали бы, работает ли данный инструмент по одному символу за раз (и как иначе МОЖЕТкакой-нибудь инструмент будет делать это в любом случае?) так что подумайте, если это тот ответ, который вы ищете или нет, но, возможно, это укажет вам направление как минимум:

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

В приведенном выше примере используется GNU awkдля ord() в библиотеке ordchr.

На основании одного из ваших комментариев может показаться, что это то, что вы ищете:

$ printf '%s' "Onkar123#" | awk -l ordchr -v RS='.{1}' '{s+=ord(RT)} END{print s+0}'
692
0 голосов
/ 10 июня 2018

Попробуйте использовать echo "test" | hexdump -e '16/1 "%02x " "\n"', заменив test на Onkar123# или что-нибудь еще

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...