Загадочный текстовый кодировщик

На уроке на прошлой неделе я рассказал о том, как текстовое сообщение можно скрыть восхитительным образом, чтобы оно вообще не выглядело как текстовое сообщение. Чтобы достичь этого, вы должны написать некоторый код, который переводит простой текст в нужные значения.

Для этого типа шифрования код перебирает текстовую строку следующим образом:

  1. Первый символ строки выводится как его значение ASCII.
  2. Получить следующий символ строки.
  3. Вычесть значение ASCII предыдущего символа
  4. Выведите результат.
  5. Если встречается новая строка, остановитесь, в противном случае повторите шаг 2.

Вот код, который я придумал:

#include <stdio.h>

#define РАЗМЕР 32

int main ()
{
    ввод символов [SIZE];
    со знаком int x, ch;

    printf ("Текст:");
    fgets (ввод, РАЗМЕР, стандартного устройства ввода);

    х = 0;
    Е ( "Перевод: \ п% d", вход [х]);
    while ((ch = input [x]))
    {
        х ++;
        printf (",% d", input [x] - ch);
        если (ch == '\ n')
            перерыв;
    }
    printf ("\ nCount:% d \ n", x + 1);
    
    Возвращение (0);
}

Строки 10 и 11 выбирают ввод. Используется функция fgets () , поэтому строка заканчивается символом новой строки или нулевым символом, но, скорее всего, символом новой строки.

Строка 14 выводит исходные результаты, которые всегда должны быть длиной не менее одного символа: даже если текст не введен, символ в элементе input[x](где xравен нулю) является новой строкой. Этот символ выводится как код ASCII 10, и программа останавливается. В противном случае вся строка обрабатывается.

В то время как петля на линии 15 плугов через строку, пока нулевой символ input[x]. Этот символ сохраняется в переменной ch. Обратите внимание, как назначение заключено в круглые скобки? Характер извлекается генерируются в качестве в то время как значения по завершению цикла; нулевой символ завершает цикл.

Строки 17 и 18 тестируют на новую строку. Если найдено, петля нарушена.

Переменная xувеличивается в строке 19, ссылаясь на следующий символ в строке.

В строке 20 значение предыдущего символа, ch, вычитается из текущего символа, input[x]. Это значение выводится. Цикл повторяется.

Вот пример прогона:

Text: Secret, sneaky text.
Translation:
83, 18, -2, 15, -13, 15, -72, -12, 83, -5, -9, -4, 10, 14, -89, 84, -15, 19, -4, -70, -36
Count: 21

Значение счетчика было добавлено (в строке 22 в коде) для ссылки на количество байтов в строке. Это значение помогает при записи в декодер, поскольку сгенерированные значения не имеют конечного маркера. Как я писал в уроке на прошлой неделе, зашифрованные значения могут быть положительными, отрицательными или нулевыми. Если бы я назначил определенное значение в качестве маркера конца, то мне не нужно было бы считать. Но поскольку этот код написан (зашифрован и расшифрован), вместо него используется значение счетчика.