From 4fbf4c11e5c2867ebb986b162c14814f487c4a66 Mon Sep 17 00:00:00 2001 From: vojta Date: Sun, 25 Jan 2026 17:18:31 +0100 Subject: [PATCH] =?UTF-8?q?P=C5=99esun=20soubor=C5=AF=20z=20jin=C3=A9ho=20?= =?UTF-8?q?repozit=C3=A1=C5=99e.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 16 +++++ README.md | 192 +++++++++++++++++++++++++++++++++++++++++++++++++++++- b2t.c | 67 +++++++++++++++++++ t2b.c | 63 ++++++++++++++++++ 4 files changed, 336 insertions(+), 2 deletions(-) create mode 100644 Makefile create mode 100644 b2t.c create mode 100644 t2b.c diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..50bcfc8 --- /dev/null +++ b/Makefile @@ -0,0 +1,16 @@ +all: + gcc -DNDEBUG b2t.c -o b2t + gcc -DNDEBUG t2b.c -o t2b + +debug: + gcc b2t.c -o b2t + gcc t2b.c -o t2b + +b2t: + gcc -DNDEBUG b2t.c -o b2t + +t2b: + gcc -DNDEBUG t2b.c -o t2b + +clean: + rm -f b2t t2b diff --git a/README.md b/README.md index 7c027d5..183ca03 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,191 @@ -# b2t +B2T & T2B - BINARY TO TEXT & TEXT TO BINARY +=========================================== -Programy pro převod mezi ASCII znaky a jejich binární reprezentací. \ No newline at end of file +Jednoduché programy pro převod binárního řetězce na textový ASCII řetězec a naopak. + + +Popis funkce B2T +---------------- + +Na standardním vstupu očekává sekvenci nul a jedniček. +Na standardní výstup vypisuje 1 odpovídající ASCII znak pro každých 8 znaků vstupu. + +Vstup se zpracovává znak po znaku, délka vstupní zprávy je tedy dána limity standardního vstupu na daném systému. + +Příklady: + 01100001 --> a + 0110000101100010 --> ab + + +Popis funkce T2B +---------------- + +Na standardním vstupu očekává řetězec ASCII znaků. +Na standardní výstup vypisuje 8 binárních zanaků odpovídajících 1 ASCII znaku vstupu. + +Vstup se zpracovává znak po znaku, délka vstupní zprávy je tedy dána limity standardního vstupu na daném systému. + +Příklady: + c --> 01100011 + cd --> 0110001101100100 + + +Překlad +------- + +Cíle pro program Make: + make . . . . . . přeloží vše + make all . . . . stejné jako "make" + make debug . . . přeloží vše s ladicími výstupy + make b2t . . . . přeloží pouze program "binary to text" + make t2b . . . . přeloží pouze program "text to binary" + make clean . . . odstraní spustitelné soubory + +Překlad pomocí GCC: + gcc -DNDEBUG b2t.c -o b2t + gcc -DNDEBUG t2b.c -o t2b + + +Spuštění +-------- + +./b2t (Linux) +./t2b (Linux) + +b2t.exe (Windows) +t2b.exe (Windows) + + +Přehled ASCII znaků a jejich číselných hodnot +--------------------------------------------- + +Desítkově Dvojkově Znak Popis (anglicky) + +0 0 NUL null character +1 1 SOH start of header +2 10 STX start of text +3 11 ETX end of text +4 100 EOT end of transmission +5 101 ENQ enquiry +6 110 ACK acknowledge +7 111 BEL bell (ring) +8 1000 BS backspace +9 1001 HT horizontal tab +10 1010 LF line feed +11 1011 VT vertical tab +12 1100 FF form feed +13 1101 CR carriage return +14 1110 SO shift out +15 1111 SI shift in +16 10000 DLE data link escape +17 10001 DC1 device control 1 +18 10010 DC2 device control 2 +19 10011 DC3 device control 3 +20 10100 DC4 device control 4 +21 10101 NAK negative acknowledge +22 10110 SYN synchronize +23 10111 ETB end transmission block +24 11000 CAN cancel +25 11001 EM end of medium +26 11010 SUB substitute +27 11011 ESC escape +28 11100 FS file separator +29 11101 GS group separator +30 11110 RS record separator +31 11111 US unit separator +32 100000 space +33 100001 ! exclamation mark +34 100010 " quotation mark +35 100011 # number sign +36 100100 $ dollar sign +37 100101 % percent sign +38 100110 & ampersand +39 100111 ' apostrophe +40 101000 ( left parenthesis +41 101001 ) right parenthesis +42 101010 * asterisk +43 101011 + plus sign +44 101100 , comma +45 101101 - hyphen +46 101110 . period +47 101111 / slash +48 110000 0 digit 0 +49 110001 1 digit 1 +50 110010 2 digit 2 +51 110011 3 digit 3 +52 110100 4 digit 4 +53 110101 5 digit 5 +54 110110 6 digit 6 +55 110111 7 digit 7 +56 111000 8 digit 8 +57 111001 9 digit 9 +58 111010 : colon +59 111011 ; semicolon +60 111100 < less than +61 111101 = equals to +62 111110 > greater than +63 111111 ? question mark +64 1000000 @ at sign +65 1000001 A uppercase A +66 1000010 B uppercase B +67 1000011 C uppercase C +68 1000100 D uppercase D +69 1000101 E uppercase E +70 1000110 F uppercase F +71 1000111 G uppercase G +72 1001000 H uppercase H +73 1001001 I uppercase I +74 1001010 J uppercase J +75 1001011 K uppercase K +76 1001100 L uppercase L +77 1001101 M uppercase M +78 1001110 N uppercase N +79 1001111 O uppercase O +80 1010000 P uppercase P +81 1010001 Q uppercase Q +82 1010010 R uppercase R +83 1010011 S uppercase S +84 1010100 T uppercase T +85 1010101 U uppercase U +86 1010110 V uppercase V +87 1010111 W uppercase W +88 1011000 X uppercase X +89 1011001 Y uppercase Y +90 1011010 Z uppercase Z +91 1011011 [ left square bracket +92 1011100 \ backslash +93 1011101 ] right-square-bracket-] +94 1011110 ^ caret-sign-^ +95 1011111 _ underscore +96 1100000 ` backtick +97 1100001 a lowercase a +98 1100010 b lowercase b +99 1100011 c lowercase c +100 1100100 d lowercase d +101 1100101 e lowercase e +102 1100110 f lowercase f +103 1100111 g lowercase g +104 1101000 h lowercase h +105 1101001 i lowercase i +106 1101010 j lowercase j +107 1101011 k lowercase k +108 1101100 l lowercase l +109 1101101 m lowercase m +110 1101110 n lowercase n +111 1101111 o lowercase o +112 1110000 p lowercase p +113 1110001 q lowercase q +114 1110010 r lowercase r +115 1110011 s lowercase s +116 1110100 t lowercase t +117 1110101 u lowercase u +118 1110110 v lowercase v +119 1110111 w lowercase w +120 1111000 x lowercase x +121 1111001 y lowercase y +122 1111010 z lowercase z +123 1111011 { left curly brace +124 1111100 | vertical bar +125 1111101 } right curly brace +126 1111110 ~ tilde +127 1111111 DEL delete (rubout) diff --git a/b2t.c b/b2t.c new file mode 100644 index 0000000..9f59317 --- /dev/null +++ b/b2t.c @@ -0,0 +1,67 @@ +#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; +} diff --git a/t2b.c b/t2b.c new file mode 100644 index 0000000..592707b --- /dev/null +++ b/t2b.c @@ -0,0 +1,63 @@ +#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 char buf[8]; + char in = '\0'; + char in_tmp = 0; + unsigned char coefs[8] = {128, 64, 32, 16, 8, 4, 2, 1}; + + + // hláška k zadání vstupu + printf("Zadejte textovy vstup: "); + + // čtení prvního znaku vstupu + in = fgetc(stdin); + + // hláška o výstupu + printf("Zakodovany binarni vystup: "); + + // cyklus zpracování vstupu + while(in != EOF && in != '\n') { + + // ladicí výpis aktuálního znaku + debug("%c\n", in); + + // kontrola vstupu + if(in < 0 && in != 255) { + fprintf(stderr, "CHYBA: Neplatny znak na %i. pozici, lze zadat pouze ASCII znaky.\n", i+1); + return -1; + } + + // binární hodnota z desítkové reprezentace ASCII znaku + in_tmp = in; + for(int j=0; j<8; j++) { + buf[j] = in_tmp / coefs[j]; + debug("DEBUG%i: -%c- -%i- [%i%i%i%i%i%i%i%i]\n", j+1, in, in_tmp, buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7]); + in_tmp = in_tmp - (buf[j] * coefs[j]); + } + + // výpis osmice binárních znaků + for(int j=0; j<8; j++) { + fputc(buf[j]+'0', stdout); + } + + + // čtení dalšího ASCII znaku + in = fgetc(stdin); + i++; + } + + // odřádkování na konci + fputc('\n', stdout); + + return 0; +}