Convertirea unui text ASCII la Base64
Să luăm spre exemplu șirul aB
. Trebuie să transformăm fiecare caracter din acest șir în reprezentarea binară a codurilor lor ASCII (tabelul de mai sus). Caracterul a
are codul ASCII 97
, deci reprezentarea în baza 2 este 01100001
. Pentru caracterul B
reprezentarea în baza 2 este 01000010
. Acum formăm un șir din aceste reprezentări, concatenându-le în ordine: 0110000101000010
.
Următorul pas este să împărțim noul șir în grupe de câte 6 biți. Dacă ultima grupă are mai puțin de 6 biți, adăugăm zerouri la sfârșit până se vor face 6 biți. Grupele sunt 011000
, 010100
, 001000
.
Următorul pas este să transformăm aceste numere în baza 10, apoi să le transformăm în caractere din codificarea Base64 folosind tabelul de mai jos. Prima grupă () se transformă în caracterul Y
, a doua grupă () se transformă în caracterul U
, iar ultima grupă în caracterul I
. Combinăm rezultatele și rezultă șirul YUI
.
Următorul și ultimul pas este să adăugăm caractere =
la sfârșitul acestui șir până lungimea acestuia devine un multiplu de .
Acest pas nu este respectat în unele cazuri, șirul rămânând la forma YUI
în loc de YUI=
, însă la această problemă vom adăuga caractere =
la sfârșit.
Pentru neclarități, consultați site-ul acesta.
Cerință
Implementați două funcții care transformă un text scris în codificarea ASCII
într-un text scris în codificarea Base64
și invers.
Funcțiile au următoarele antete:
std::string ASCII_to_Base64(std::string s);
std::string Base64_to_ASCII(std::string s);
Restricții și precizări
- Lungimea șirului este mai mică strict decât .
- Pentru 50 de puncte trebuie să implementați corect funcția
ASCII_to_Base64()
, iar pentru alte 50 de puncte funcțiaBase64_to_ASCII()
. - Este garantat că conține doar caractere care aparțin codificării respective (pentru codificarea
ASCII
caracterele din primul tabel, iar pentru codificareaBase64
caracterele din al doilea tabel, la care se mai adaugă și=
). - Este garantat că textul scris în codificarea
Base64
conține doar caractere valide pentru codificareaASCII
atunci când este transformat. - Atenție! Cerința este să implementați funcțiile menționate anterior. Codul pe care îl veți trimite nu va conține funcția
main()
— aceasta va fi înlocuită de cele două funcții. Iată un exemplu de un program valid:
#include <string>
using namespace std;
string ASCII_to_Base64(string s) { return "QSB2ZW5pdCBBbGV4IQ=="; }
string Base64_to_ASCII(string s) { return ":))"; }