Ver Mensaje Individual
  #5 (permalink)  
Antiguo 26/09/2009, 16:52
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 10 meses
Puntos: 260
Sonrisa Respuesta: Convertir una cadena a representación binaria

Hola,

Por ejemplo:

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char** argv) {
  5.  
  6.     FILE *stream;
  7.  
  8.     float d = atof("-0.275510E+01");
  9.  
  10.     stream = fopen("data.bin", "w");
  11.     fwrite(&d, sizeof(float), 1, stream);
  12.     fclose(stream);
  13.  
  14.     d = 0;
  15.  
  16.     stream = fopen("data.bin", "r");
  17.     fread(&d, sizeof(float), 1, stream);
  18.     fclose(stream);
  19.  
  20.     printf("%f", d);
  21.  
  22.     return (0);
  23. }

En este caso, se convierte la cadena de caracteres en un float con la función atof, seguidamente lo almacenas en un archivo denominado 'data.bin', y seguidamente se vuelve a leer y se muestra en pantalla, se puede observar que el valor sigue siendo el mismo (posiblemente con una representación diferente -2.755100, pero el valor es exactamente el mismo --- con su respectivo error de precisión de todos los numeros 'flotantes' o 'dobles').

Si revisas el tamaño del archivo 'data.bin' (con 'dir' o 'ls', según el sistema operativo que estés usando --- desde el Explorador de Windows NO porque dice 1 o 4 Kb por otros motivos del NTFS), puedes observar que tiene de tamaño exactamente 4 bytes, porque cualquier float usa 4 bytes, en memoria y en disco.

Realmente no sé como explicar que un float es 'binario' interna y automáticamente, son 32 bits, usa 1 bit para el signo, 8 para la mantisa y veinte y tantos para el numero, http://en.wikipedia.org/wiki/Single_precision .

No podemos ver que está guardado en binario, porque no tiene sentido para el ser humano, por eso solo podemos verlo en decimal o hexadecimal, (o haciendo un algoritmo que lo muestre en binario), está de mas decir que si ves el archivo internamente con un editor hexadecimal o el Block de Notas o GEdit, no vas a ver el número sino 'caracteres extraños' que se forman al intentar representar datos binarios en la tabla ASCII.

Saludos,

Última edición por HackmanC; 26/09/2009 a las 17:10 Razón: agregar precisión