RE:compresor y descompresor (2)
DIRECCION objDireccion;
memset(&objDireccion, 0, sizeof(DIRECCION));
strcpy(objDireccion.szCalleYNumero, "Altadena 118");
strcpy(objDireccion.szColonia, "Napoles");
strcpy(objDireccion.szCiudad, "Mexico");
strcpy(objDireccion.szEstado, "Distrito Federal");
strcpy(objDireccion.szCPostal, "03810");
Por ejemplo, el campo DIRECCION::szCiudad contiene "Mexico", que son seis letras (bytes). ¡Tienes un campo de 512 bytes y sólo empleas seis! Claro, pudiese haber direcciones que emplearan mucho más. Entonces, cuando serialices, tendrías un archivo que, en la parte de ciudad, tendría la palabra Mejico seguido de 506 caracteres en blanco, esto es, 506 bytes.
Sin embargo, una variable short ocupa dos bytes y tiene un rango de –32,768 a 32,767. Entonces, se me ocurrió, antes de cada miembro de DIRECCION, inserto dos bytes que representan el tamaño vacío del campo (en este caso 506). Así, reduje el tamaño de mi variable de 512 bytes a tan sólo 8 (seis de "Mexico" más dos de mi variable short).