#include int main(void) { char c = 0; // Input character int count = 0; // Hex digits parsed for this number long long v = 0; // Current value while ((c = getchar()) != EOF) { // Skip comments if (c == '\\') { while ((c = getchar()) != EOF && c != '\n') {} } // Process incoming digits and add to running value else if (('0' <= c) && (c <= '9')) { v = (v << 4) + (c - '0'); count++; } else if (('a' <= c) && (c <= 'f')) { v = (v << 4) + (c - 'a' + 10); count++; } // Send the finished number out the other end else if (c == ' ') { // Turn the number of hex digits into a number of bytes if (count & 1) count++; count >>= 1; // Emit each byte, littlest first for (; count>0; count--) { c = v & 0xFF; putchar(c); v >>= 8; } } } }