Codificar en Base64 (1) V84122


Statement
 

pdf   zip   main.cc

thehtml

Preliminars

En base 2 tenim 2 dígits (0 i 1), en base 10 en tenim 10 (0, 1, 2, ..., 9), i en base 16 en tenim 16 (l’hexadecimal, que utilitza 0, 1, 2, ..., 9, A, B, C, D, E, i F).

La base 64 és doncs, simplement, una base amb molts més dígits. Però donat que necessitem 64 símbols diferents per representar tots els dígits, cal fer servir totes les lletres del codi ASCII (26 majúscules i 26 minúscules, en total 52), i tots els dígits decimals (0 a 9, en total 10). De fet això no és suficient, perquè ens dóna 62 símbols en total. Per arribar als 64, es van escollir el ’+’ pel dígit 62 i ’/’ pel 63.

Les correspondències exactes entre dígits en base 64 i els seus caràcters respectius són aquestes:

  • Del 0 al 25, la corresponent lletra majúscula,
  • del 26 al 51, la corresponent lletra minúscula,
  • del 52 al 61, el corresponent dígit decimal,
  • el 62 és el caràcter ’+’; i
  • el 63 és el caràcter ’/’.

Així doncs, si mostrem els caràcters ASCII utilitzats, tots junts i per ordre, en la codificació de base 64 (que, per cert, és un estàndard), tenim:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

Objectiu

Fes una funció que, donat un valor en base 64 retorni el seu caràcter associat. La funció té la capçalera:

/**
 * @brief Passa un valor en base 64 a un caràcter.
 * @pre Precondició: `d` >= 0 i `d` <= 63
 */
char base64_to_char(int d);

Observació

Aquest problema té com a centres d’interès la correctesa i la llegibilitat. Només cal enviar la funció demanada; el programa principal serà ignorat. No es poden utilitzar les funcions isupper, islower de la llibreria estàndard.

Sample session
base64_to_char(0) -> 'A'
base64_to_char(1) -> 'B'
base64_to_char(25) -> 'Z'
base64_to_char(26) -> 'a'
base64_to_char(27) -> 'b'
base64_to_char(51) -> 'z'
base64_to_char(52) -> '0'
base64_to_char(53) -> '1'
base64_to_char(61) -> '9'
base64_to_char(62) -> '+'
base64_to_char(63) -> '/'
Information
Author
Pau Fernández
Language
Catalan
Other languages
Spanish
Official solutions
C++
User solutions
C++