miércoles, 17 de septiembre de 2008

Caracteres en un archivo binario usando C++

Escribir y leer datos en un archivo binario no presenta demasiadas dificultades. Por ejemplo, para escribir un entero "e" y un float "f" en un archivo binario "bin" hacemos lo siguiente:


int e=10;
float f=12.5;
fstream bin("archivo.bin", ios::binary|ios::out);
bin.write((char *)&e, sizeof(int));
bin.write((char *)&f, sizeof(float));
bin.close();


Todo es lindo y prolijo, ahora, qué pasa si tengo una cadena de caracteres al estilo C de 14 caracteres?

Bien, las cadenas de caracteres al estilo C son vectores de bytes, y por lo tanto el identificador de la variable es un puntero a la dirección de memoria del primer caracter. O sea que para escribir este flujo de 14 bytes debemos ir iterando y guardar dato por dato. Vamos a los bifes, supongamos que tenemos una cadena "pianobar":


char pianobar[14]="nace una flor";
fstream bin("archivo.bin", ios::binary|ios::out);
for (int i=0;i<14;i++){
bin.write((char *)&pianobar[i], 1)
}


Ahora, vamos a leer esta cadena:

char pianobar[14];
fstream bin("archivo.bin", ios::binary|ios::in);
bin.read((char *)&pianobar, 14)



De lo anterior vemos que la escritura se hace caracter por caracter, dejando un espacio de 1 byte por cada uno, luego al momento de leer el dato, se indica la cantidad total de bytes (para el ejemplo 14) y se asigna a la variable.

El único detalle a tener en cuenta es que la longitud de la cadena que hemos definido es de 14, sin embargo posee un máximo de 13 caracteres, ya que el último caracter queda reservado para el siguiente código de finalización "\0". Otro punto a tener en cuenta es que las cadenas, al igual que los vectores comienzan en la posición 0.

No hay comentarios: