#include #include #include #include int nybble(char c) { if ('0' <= c && c <= '9') { return c - '0'; } else if ('A' <= c && c <= 'F') { return c - 'A' + 10; } else if ('a' <= c && c <= 'f') { return c - 'a' + 10; } else { return -1; } } int main(void) { for (;;) { int high_nybble; bool eof_reached = false; for (;;) { char c = getchar(); if (c == EOF) { if (feof(stdin)) { eof_reached = true; break; } else { err(1, "Error reading high nybble"); } } high_nybble = nybble(c); if (high_nybble != -1) { break; } } if (eof_reached) { break; } int low_nybble; for (;;) { char c = getchar(); if (c == EOF) { if (feof(stdin)) { errx(1, "Expected low nybble"); } else { err(1, "Error reading low nybble"); } } low_nybble = nybble(c); if (low_nybble != -1) { break; } } if (putchar((high_nybble << 4) | low_nybble) == EOF) { err(1, "Error writing byte"); } } if (fflush(stdout) == EOF) { err(1, "Error flushing stdout"); } return 0; }