Dúvida: Codificador/decodificador
Alô galera.
Achei um exercício interessante na rede para praticar a Linguagem C. Infelizmente não estou conseguindo desenvolvê-lo.
O Exercício pede para fazer dois programas que permitam respectivamente a codificação e a decodificação de arquivos para a representação em base64. Ou seja, um dos programas deve ser responsável pela codificação e o outro deve ser responsável pela respectiva decodificação.
A codificação de um arquivo qualquer (origem) para uma representação base64 (destino) deve ser feita da seguinte forma:
1 - Ler 3 bytes do arquivo origem.
Ex: 3 bytes => (11110000) (10101010) (00001111)
2 - Separar esses 3 bytes em 4 blocos contendo 6 bits cada.
Ex: (11110000) (10101010) (00001111) =>
=> (111100 | 00 ) ( 1010 | 1010 ) ( 00 | 001111) =>
=> (111100) (001010) (101000) (001111).
OBS. Os bits em negrito pertenciam ao 1o Byte, os em itálico pertenciam ao 2o Byte e os sublinhados pertenciam ao 3o Byte.
3 - Representar esses 4 blocos usando bytes. Para isso, concatenar esses 4 blocos com dois zeros (0) nos bits mais significantes (bits da esquerda).
Ex: (111100) (001010) (101000) (001111) =>
=> (00111100) (00001010) (00101000) (00001111)
OBS. Os bits em negrito foram os zeros (0) inseridos.
Converter os 4 Bytes resultantes para caracteres (letras) de acordo com a lista decimal-caractere abaixo:
0 = 'A',
1 = 'B',
2 = 'C',
3 = 'D',
4 = 'E',
5 = 'F',
6 = 'G',
7 = 'H',
8 = 'I',
9 = 'J',
10 = 'K',
11 = 'L',
12 = 'M',
13 = 'N',
14 = 'O',
15 = 'P',
16 = 'Q',
17 = 'R',
18 = 'S',
19 = 'T',
20 = 'U','
21 = V',
22 = 'W',
23 = 'X',
24 = 'Y',
25 = 'Z',
26 = 'a',
27 = 'b',
28 = 'c',
29 = 'd',
30 = 'e',
31 = 'f',
32 = 'g',
33 = 'h',
34 = 'i',
35 = 'j',
36 = 'k',
37 = 'l',
38 = 'm',
39 = 'n',
40 = 'o',
'p',
'q',
'r',
's',
't',
'u',
'v',
'w',
'x',
'y',
'z',
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'+',
'/'
Ex:
Binário: (00111100) (00001010) (00101000) (00001111) =
= Decimal: (60) (10) (40) (15) =
= Caractere: ('8') ('K') ('o') ('P')
Sei que talvez seja pedir demais, mas gostaria de analisar algumas ideias do pessoal aqui do forum para tentar entender a lógica.
Valeu.