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:
+’; i
/’.
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.
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) -> '/'