Para el bien de aprendizaje de la C y la comprensión de la diferencia entre Archivos Binarios y de Texto, estoy tratando de escribir una cadena de presentar como ambos tipos de archivo así:

char * string = "I am a string!";

FILE * filePtrA = fopen("/output.txt", "wt");
fwrite(string, strlen(string), 1, filePtrA);

FILE * filePtrB = fopen("/output.bin", "wb");
fwrite(string, strlen(string), 1, filePtrB);

fclose(filePtrA);
fclose(filePtrB);

Sin embargo, tanto el "wt" y "wb" están escribiendo como un Archivo de Texto, donde "wb" debe ser escrito como un Archivo Binario. Hex aparece como así para ambos archivos:

49 20 61 6D 20 61 20 73 74 72 69 6E 67 21

¿Por qué sucede esto y cómo puedo escribir algo como un Archivo Binario?

He leído que el sistema operativo (Mac OS X 10.6 – GCC 4.2) puede no diferenciar entre Binarios y Archivos de Texto, aunque todavía estoy confundido por qué un editor hexadecimal no detectar ninguna diferencia.

Me pregunto lo que usted espera ver en «binario» archivo?

OriginalEl autor Dave Gallagher | 2010-11-11

6 Comentarios

  1. 6

    Todos los archivos binarios.

    La diferencia entre «archivos de texto» y «archivos binarios» en el contexto de fopen es que la biblioteca estándar se puede utilizar un filtro para leer y escribir el archivo en modo texto. En modo binario, lo que usted escribe es siempre lo que está escrito.

    El único ejemplo práctico que conozco es en Windows, donde la apertura de un archivo en modo texto va a hacer es convertir entre Windows al estilo de los finales de línea (CRLF, "\r\n") y C-estilo/estilo Unix línea de terminaciones (LF, "\n"). Por ejemplo, cuando se abre un archivo para lectura en Windows en modo texto, los finales de línea aparecerá como "\n" en su programa. Si se va a abrir en modo binario, finales de línea aparecería como "\r\n" en su programa.


    También puede examinar el archivo con cat, por ejemplo:

    gato nombre de archivo

    Usted debe obtener la salida: I am a string!

    La sintaxis correcta es «gato de nombre de archivo».
    Para aclarar, El ángulo entre corchetes «filename» estaban destinados sólo para ilustrar que es una variable, no es algo a copiar literalmente. Para reemplazar la cadena <filename> por el nombre real del archivo, y usted debe ser bueno 🙂
    Versiones de Mac OS anteriores a OS X utiliza \r para indicar la línea de terminaciones, de modo de texto/binario en modo distinción es pertinente.

    OriginalEl autor Magnus Hoff

  2. 3

    Ambos archivos son binario archivos. Son una copia exacta de los datos que usted envía a fwrite. Algunos rotos los sistemas operativos se han archivos de texto que no son binarias; tienen extra basura, como \r\n sustitución de \n, o de tamaño fijo de la línea de registros, etc. POSIX prohíbe todo esto. En cualquier POSIX OS, el texto y el modo binario son idénticos.

    Por el camino, "wt" no es válido en modo de argumento para fopen. El modo de texto predeterminado. El t modificador de texto de la solicitud es un modo de extensión de las Ventanas rotas de las implementaciones donde binario es el valor por defecto, pero en modo texto está disponible bajo petición.

    Qué implementaciones binarios como modo por defecto? Mi experiencia ha sido siempre el texto es el modo por defecto (y, en MS C, t modificador es redundante, pero la gente lo usa para mayor claridad)
    El modo texto es siempre el modo por defecto; esto es requerido por la norma ISO C. POSIX requiere en modo texto y modo binario ser idénticos, así que no importa.

    OriginalEl autor R..

  3. 1

    La única diferencia del modo de texto hace que sea a finales de línea. Por lo tanto, si usted fprintf un \n será traducido de acuerdo a la plataforma. Por su ejemplo, binario o en modo texto no hace ninguna diferencia a lo que se escribe en el archivo.

    OriginalEl autor developmentalinsanity

  4. 1

    En la mayoría de sistemas Unix, hay no diferencia entre la apertura de un archivo de texto o binario modo. Además, los datos que está escrito arriba no muestran una diferencia, incluso en muchos de los sistemas que hacer tratar de «texto» y «binario» archivos de forma diferente.

    Por ejemplo, en Windows de abrir un archivo en modo texto normalmente significa que un «\n» que escriba va a ser traducido a «\r\n» en el archivo real (y durante la lectura el contrario se hace). Puesto que usted no ha escrito un «\n», de que la traducción no sucederá.

    Reemplazar «más» con «todos». POSIX requiere en modo texto y modo binario a ser idénticos. Esto es tan fundamental que no creo que usted podría considerar la posibilidad de cualquier sistema operativo que no sea «Unix-like».

    OriginalEl autor Jerry Coffin

  5. 0

    Unix como OS trata como iguales.
    No estoy seguro de que esta es la respuesta correcta, pero si quieres poner un texto como hexadecimal en un archivo, pruebe a aplicar \x antes de que el texto.e.g. si usted está tratando de escribir hola en un archivo, usted está buffer será:

    char *buf = «hola»;

    Si desea escribir hex de «hola» en el archivo, el buffer debe ser como este

    char *buff = «\x68\x65\x6c\x6c\x6f»;

    Espero que ayudó a

    En la memoria, tanto buff son exactamente los mismos. No hay ninguna diferencia.
    Sí, pero la diferencia es que cuando se escribe en el archivo. En el primer caso «hola», que se escriben como texto en el archivo, mientras que «\x68\x65\x6c\x6c\x6f» será escrito como hex en el archivo de texto
    Que está mal. Ya que no hay diferencia en la memoria, fwrite sólo escribe idéntica de un bloque de datos a un archivo. Usted necesidad de utilizar \x sólo para los caracteres que no pueden ser directamente codificada en el archivo de origen. Sólo probarlo.

    OriginalEl autor fluffybunny

Dejar respuesta

Please enter your comment!
Please enter your name here