Base 80 ?? ¿Por qué 80? No tiene sentido, sin embargo, la base 85 sí. Es bastante conveniente ya que puede representar 4 bytes con 5 caracteres (porque 85 ^ 5 = 4,437,053,125, que es un poco más de 2 ^ 32 = 4,294,967,296)
Aquí está mi código para escribir un solo 32 bits word
:
for (i=0; i<5; i++)
{
c = (word % 85) + 37;
word /= 85;
fwrite(&c, sizeof(uint8_t), 1, file);
}
y aquí para leerlo de nuevo:
word = 0;
for (i=4; i>=0; i--)
fread(&c[i], sizeof(uint8_t), 1, file);
for (i=0; i<5; i++)
word = word*85 + c[i]-37;
Si realmente desea usar la base 80, puede usar el mismo enfoque y reemplazar las instancias de 85 con 80 y necesitará 6 caracteres por cada 4 bytes en lugar de 5.
Sin embargo, ¿cómo va a comprimir algo? Te das cuenta de que los archivos están escritos en la base 256, ¿verdad? Dicho esto, si comprime un archivo escrito en base 85, tendrá aproximadamente el mismo tamaño que el archivo base 256 original comprimido, lo que hace que la base 85 (o la base 64) sea una buena opción si desea representar datos binarios con caracteres imprimibles.