Estoy tratando de escribir los números enteros binarios de archivo, pero sigue dando caracteres extraños en el archivo binario. Por ejemplo, trato de escribir de 2000, pero en el archivo que voy a obtener algo extraño. ¿Cómo puedo solucionarlo? No se pudo encontrar la solución a cualquier lugar.

Puedo usar el siguiente código:

 //create the file
        FileStream fs = new FileStream("iram.bin", FileMode.Create);
        //Create the writer for data.
        BinaryWriter w = new BinaryWriter(fs);

w.Write((int) 2000);

w.Close();
fs.Close();
  • FileStream y BinaryWriter implementar el IDisposable de la interfaz. Envuelva su uso en un using bloque y renunciar a la explícita .Close()s.
InformationsquelleAutor user2151660 | 2013-05-14

2 Comentarios

  1. 4

    Creo que el problema es que no van a leer los datos correctamente.

    Usted tendrá que leer de nuevo los datos utilizando un BinaryReader como así…

        using (FileStream fs2 = new FileStream("iram.bin", FileMode.Open))
        {
            using(BinaryReader r = new BinaryReader(fs2))
            {
                var integerValue = r.ReadInt32();
            }
        }

    A menos que por supuesto usted realmente desea escribir texto en el archivo, en cuyo caso es probable que no desee un BinaryWriter a escribir los datos.

    Si usted realmente desea escribir los datos de texto, puede hacerlo de esta manera… (asegúrese de establecer la codificación a lo que usted necesita)

        using (var tw = new StreamWriter("iram.txt", true, Encoding.ASCII))
        {
            tw.WriteLine(2000);
        }

    Edit: Como Jesse mencionó que normalmente se desea envolver objetos desechables en el uso de los bloques.

  2. 1

    La razón por la que usted está consiguiendo inesperado caracteres en el archivo es porque lo que estás escribiendo para que el archivo no está destinada a ser interpretada como una secuencia de caracteres, en primer lugar,

    Cuando se abre en el bloc de notas u otro editor de texto, se acaba de tomar lo que hay, supongo que la codificación(o utilizar un defecto), y mostrarte todo lo chars los datos de encode si se tratara de codificación de caracteres. No pretende ser legible por humanos.


    Un texto legible por humanos del archivo que tiene la secuencia de caracteres 2000 en realidad tiene una codificación de los caracteres 2, seguido de la codificación de 0 3 veces.

    en Unicode es U+0032U+0030U+0030U+0030

    • Umm, no. El OP está echando el 2000 a un tipo int, por lo que es 0x7D0, o en binario, probablemente 4 bytes 0000 0111 1101 0000. No Unicode
    • que mal entendido esa parte. Yo estaba tratando de ilustrar lo que la codificación puede estar en un archivo que muestre "2000" el caso de abrir en un editor de texto
    • Yo lo hice para ilustrar la diferencia entre un archivo binario y un archivo legible
    • Yo creo que va a ser escrito little-endian: 00, D0, 07, 00.

Dejar respuesta

Please enter your comment!
Please enter your name here