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