Files

68 lines
2.1 KiB
C

#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;
}