Přesun souborů z jiného repozitáře.
This commit is contained in:
@@ -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
|
||||||
@@ -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í.
|
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)
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user