Untitled

 avatar
unknown
plain_text
a year ago
1.6 kB
1
Indexable
#include <stdio.h>

// Функция для кодирования символов в их шестнадцатеричные ASCII коды
void encode() {
    int c;
    while ((c = getchar()) != '\n' && c != EOF) {
        if (c != ' ') { // Игнорируем пробелы
            printf("%02X", c);
        }
    }
}

// Функция для декодирования шестнадцатеричных ASCII кодов обратно в символы
void decode() {
    int c1, c2;
    while ((c1 = getchar()) != '\n' && c1 != EOF) {
        if (c1 == ' ') continue; // Пропускаем пробелы, если они есть

        c2 = getchar();
        if (c2 == '\n' || c2 == EOF) break; // Если ввод не полный, завершаем

        if (c1 >= '0' && c1 <= '9') c1 -= '0';
        else if (c1 >= 'A' && c1 <= 'F') c1 -= 'A' - 10;
        else if (c1 >= 'a' && c1 <= 'f') c1 -= 'a' - 10;
        else {
            printf("n/a");
            return;
        }

        if (c2 >= '0' && c2 <= '9') c2 -= '0';
        else if (c2 >= 'A' && c2 <= 'F') c2 -= 'A' - 10;
        else if (c2 >= 'a' && c2 <= 'f') c2 -= 'a' - 10;
        else {
            printf("n/a");
            return;
        }

        printf("%c", (c1 << 4) | c2);
    }
}

int main(int argc, char *argv[]) {
    if (argc != 2) {
        printf("n/a\n");
        return 1;
    }

    if (argv[1][0] == '0') {
        encode();
    } else if (argv[1][0] == '1') {
        decode();
    } else {
        printf("n/a\n");
        return 1;
    }

    return 0;
}
Leave a Comment