Preliminares
En base 2 tenemos 2 dígitos (0 y 1), en base 10 tenemos 10 (0, 1, 2, ..., 9), y en base 16 tenemos 16 (el hexadecimal, que utiliza 0, 1, 2, ..., 9, A, B, C, D, E, y F).
La base 64 es pues, simplemente, una base con muchos más dígitos. Pero dado que necesitamos 64 símbolos diferentes para representar todos los dígitos, es necesario usar todas las letras del código ASCII (26 mayúsculas y 26 minúsculas, en total 52), y todos los dígitos decimales (0 a 9, en total 10). De hecho esto no es suficiente, porque nos da 62 símbolos en total. Para llegar a los 64, se eligieron el ’+’ para el dígito 62 y ’/’ para el 63.
Las correspondencias exactas entre dígitos en base 64 y sus caracteres respectivos son estas:
+’; y
/’.
Así pues, si mostramos los caracteres ASCII utilizados en base 64 (que, por cierto, es un estándar), todos juntos y por orden, tenemos:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
Objetivo
Haz una función que, dado un carácter que representa un dígito en base 64, retorne el dígito como un entero (entre 0 y 63). La función tiene la cabecera:
/** * @brief Pasa un carácter que representa un dígito en base 64 a su * valor correspondiente * * @pre Precondición: c es una letra, un dígito decimal, o bien `+` o `/` */ int char_to_base64(char c);
Observación
Este problema tiene como centros de interés la corrección y la legibilidad. Solo hay que enviar la función pedida, el programa principal será ignorado. No se pueden utilizar las funciones isupper, islower de la librería estándar.
char_to_base64('A') -> 0 char_to_base64('B') -> 1 char_to_base64('Z') -> 25 char_to_base64('a') -> 26 char_to_base64('b') -> 27 char_to_base64('z') -> 51 char_to_base64('0') -> 52 char_to_base64('1') -> 53 char_to_base64('9') -> 61 char_to_base64('+') -> 62 char_to_base64('/') -> 63