Загрузка данных


#include <stdio.h>

int hex_to_dec(char c) {
    int result = -1;

    if (c >= '0' && c <= '9') {
        result = c - '0';
    } else if (c >= 'A' && c <= 'F') {
        result = c - 'A' + 10;
    }

    return result;
}

char dec_to_hex(int n) {
    char result;

    if (n < 10) {
        result = '0' + n;
    } else {
        result = 'A' + (n - 10);
    }

    return result;
}

void encode_char(char c) {
    unsigned char value = (unsigned char)c;

    int high = value / 16;
    int low = value % 16;

    printf("%c%c", dec_to_hex(high), dec_to_hex(low));
}

void decode_hex(char a, char b) {
    int high = hex_to_dec(a);
    int low = hex_to_dec(b);

    if (high == -1 || low == -1) {
        printf("n/a");
        return;
    }

    char result = (char)(high * 16 + low);
    printf("%c", result);
}

int encode_mode(void) {
    char c;
    int first = 1;

    while ((c = getchar()) != '\n' && c != EOF) {
        if (c == ' ') {
            continue;
        }

        if (!first) {
            printf(" ");
        }

        encode_char(c);
        first = 0;

        c = getchar();

        if (c != ' ' && c != '\n' && c != EOF) {
            return 0;
        }

        if (c == '\n' || c == EOF) {
            break;
        }
    }

    return !first;
}

int decode_mode(void) {
    char a, b;
    int first = 1;

    while (scanf("%c%c", &a, &b) == 2) {
        if (!first) {
            printf(" ");
        }

        if (hex_to_dec(a) == -1 || hex_to_dec(b) == -1) {
            return 0;
        }

        decode_hex(a, b);
        first = 0;

        int sep = getchar();

        if (sep == '\n' || sep == EOF) {
            break;
        }

        if (sep != ' ') {
            return 0;
        }
    }

    return !first;
}

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

    int ok = 0;

    if (argv[1][0] == '0' && argv[1][1] == '\0') {
        ok = encode_mode();
    } else if (argv[1][0] == '1' && argv[1][1] == '\0') {
        ok = decode_mode();
    }

    if (!ok) {
        printf("n/a");
    }

    return 0;
}