2

У меня есть сомнения, я знаю, что с помощью этой команды она печатает значение символа на основе таблицы Ascii:

printf "%d\n" "'a" ##prints 97

Но мне интересно, как я могу заставить мою программу показывать мне значение слова ascii, кто-нибудь может сказать мне, если это возможно, или как мне сложить значение каждой буквы, чтобы получить результат значения слова, образованного сумма букв?

2 ответа2

1

Если вы можете придерживаться Python, простой скрипт будет отображать значения символов ASCII:

Создать скрипт (назовите его, например, ascii.py)

#!/usr/bin/python
import fileinput
for line in fileinput.input():
    for c in line:
        print ord(c)

затем вызовите скрипт так:

echo "hello" | ascii.py

Это можно легко изменить до итоговых значений ASCII.

0

Это сводится к проблеме итерации по буквам слова, которая не является тривиальной в bash. Мой подход ужасно хакерский, но, похоже, работает:

#!/bin/bash
WORD="$1"
REGEXP='';
ASCIISUM=0
while true; do
        LETTER=$(echo "$WORD" | sed "s/$REGEXP\(.\).*/\1/")
        test "$LETTER" == "$WORD" && break;
        ASCII=$(printf '%d' "'$LETTER")
        echo "Adding '$LETTER': $ASCII"
        ASCIISUM=$(($ASCIISUM+$ASCII))
        REGEXP=".$REGEXP"
done
echo "Sum of ASCII values of '$WORD': $ASCIISUM"

Сохраните, например, в asciisum.sh и вызовите /path/to/asciisum.sh "word"

Редактировать:

Несколько слов объяснения:

  • REGEXP используется для поддержания регулярного выражения периодов, ровно по одному на каждую проходящую букву - это соответствует буквам перед тем, который я хочу.
  • Используя sed я теперь отфильтровываю эти уже готовые буквы и каждую букву после текущей, оставляя только текущую букву.
  • Если мое регулярное выражение больше не соответствует (то есть слово не изменяется с помощью sed), цикл прерывается
  • Оттуда это легко: вычислить ASCII код буквы и прибавить к сумме

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .