#include "stdio.h" // ladicí výpisy #ifdef NDEBUG #define debug(...) #else #define debug(...) do{fprintf(stderr, __VA_ARGS__);}while(0) #endif int main() { int i=0; unsigned int buf = 0; char in = '\0'; unsigned int in_tmp = 0; // hláška k zadání vstupu printf("Zadejte binarni vstup: "); // čtení prvního znaku vstupu in = fgetc(stdin); // hláška o výstupu printf("Dekodovany text: "); // cyklus zpracování vstupu while(in != EOF && in != '\n') { // kontrola vstupu if(in != '0' && in != '1') { fprintf(stderr, "CHYBA: Neplatny znak na %i. pozici (lze zadat pouze 0 nebo 1).\n", i+1); return -1; } // převod vstupního znaku 0 nebo 1 na číslo 0 nebo číslo 1 in_tmp = in-'0'; // převod binárního vstupu na desítkové číslo switch(i%8) { case 0: buf = buf + (in_tmp * 128); debug("DEBUG1: -%c- _%i_ _%b_ _%c_\n", in, buf, buf, buf); break; // 1. znak case 1: buf = buf + (in_tmp * 64); debug("DEBUG2: -%c- _%i_ _%b_ _%c_\n", in, buf, buf, buf); break; // 2. znak case 2: buf = buf + (in_tmp * 32); debug("DEBUG3: -%c- _%i_ _%b_ _%c_\n", in, buf, buf, buf); break; // 3. znak case 3: buf = buf + (in_tmp * 16); debug("DEBUG4: -%c- _%i_ _%b_ _%c_\n", in, buf, buf, buf); break; // 4. znak case 4: buf = buf + (in_tmp * 8); debug("DEBUG5: -%c- _%i_ _%b_ _%c_\n", in, buf, buf, buf); break; // 5. znak case 5: buf = buf + (in_tmp * 4); debug("DEBUG6: -%c- _%i_ _%b_ _%c_\n", in, buf, buf, buf); break; // 6. znak case 6: buf = buf + (in_tmp * 2); debug("DEBUG7: -%c- _%i_ _%b_ _%c_\n", in, buf, buf, buf); break; // 7. znak case 7: buf = buf + in_tmp; debug("DEBUG8: -%c- _%i_ _%b_ _%c_\n", in, buf, buf, buf); break; // 8. znak } // dekódování ASCII znaku z desítkového čísla po každém osmém binárním znaku if(i%8 == 7) { // dekódování a výpis výstup debug("DEBUG_ZNAK: _%i_ _%c_\n", buf, buf); fputc(buf, stdout); buf = 0; } // čtení dalšího binárního znaku in = fgetc(stdin); i++; } // odřádkování na konci fputc('\n', stdout); return 0; }