Tengo un programa de escritura guardar un archivo de texto mediante stdio interfaz. Es intercambiar las 4 de la MSB con el 4 LSB, excepto los caracteres CR y/o LF.

Estoy tratando de «decodificar» esta secuencia mediante un programa de C#, pero soy incapaz de conseguir el original bytes.

        StringBuilder sb = new StringBuilder();
        StreamReader sr = new StreamReader("XXX.dat", Encoding.ASCII);
        string sLine;

        while ((sLine = sr.ReadLine()) != null) {
            string s = "";
            byte[] bytes = Encoding.ASCII.GetBytes(sLine);

            for (int i = 0; i < sLine.Length; i++) {
                byte c = bytes[i];
                byte lb = (byte)((c & 0x0F) << 4), hb = (byte)((c & 0xF0) >> 4);
                byte ascii = (byte)((lb) | (hb));

                s += Encoding.ASCII.GetString(new byte[] { ascii });
            }
            sb.AppendLine(s);
        }
        sr.Close();

        return (sb);

He intentado cambiar la codificación en UTF-8, pero no trabajó. También he utilizado una BinaryReader creado usando el ‘sr’ StreamReader, pero nada bueno ha pasado.

     StringBuilder sb = new StringBuilder();
        StreamReader sr = new StreamReader("XXX.shb", Encoding.ASCII);
        BinaryReader br = new BinaryReader(sr.BaseStream);
        string sLine;
        string s = "";

        while (sr.EndOfStream == false) {
            byte[] buffer = br.ReadBytes(1);
            byte c = buffer[0];
            byte lb = (byte)((c & 0x0F) << 4), hb = (byte)((c & 0xF0) >> 4);
            byte ascii = (byte)((lb) | (hb));

            s += Encoding.ASCII.GetString(new byte[] { ascii });
        }
        sr.Close();

        return (sb);

Si el archivo comienza con 0xF2 0xF2 …, he leído todo, excepto el valor esperado. ¿Dónde está el error? (es decir: 0xF6 0xF6).

Realidad este código C hacer el trabajo:

            ...
while (fgets(line, 2048, bfd) != NULL) {
    int cLen = strlen(xxx), lLen = strlen(line), i;

    //Decode line
    for (i = 0; i < lLen-1; i++) {
        unsigned char c = (unsigned char)line[i];
        line[i] = ((c & 0xF0) >> 4) | ((c & 0x0F) << 4);
    }

    xxx = realloc(xxx , cLen + lLen + 2);
    xxx = strcat(xxx , line);
    xxx = strcat(xxx , "\n");
}
fclose(bfd);

Lo malo en el código de C#?

InformationsquelleAutor Luca | 2010-03-03

2 Comentarios

  1. 2

    Tengo.

    El problema es el BinaryReader construcción:

    StreamReader sr = new StreamReader("XXX.shb", Encoding.ASCII);
    BinaryReader br = new BinaryReader(sr.BaseStream);

    Creo que esta la construcción de un BinaryReader basado en StreaReader que «traducir» los personajes que proceden de los archivos.

    El uso de este código, funciona realmente bien:

    FileInfo fi = new FileInfo("XXX.shb");
    BinaryReader br = new BinaryReader(fi.OpenRead());

    Me pregunto si es posible leer ese tipo de datos con una secuencia de Texto lector línea por línea, desde finales de línea se conservan durante la «codificación» de la fase.

    • línea de terminaciones no tiene por qué tener sentido cuando el tratamiento de los archivos como «tonto» bytes, creo que para ello usted no tiene soporte para «línea de lectura» en un BinaryReader. Pero es que realmente un problema para usted? Si usted todavía quiere a «decodificar» todo su archivo, no tiene mucho sentido hacerlo línea por línea.
  2. 0

    Supongo que debe utilizar un BinaryReader y ReadBytes(), entonces sólo el uso de la Codificación.ASCII.GetString() en el bytesequence después de haber intercambiado los bits.

    En tu ejemplo, que parecen leer el archivo ascii (es decir, de convertir los bytes .NET dual interno-código de bytes a leer diciéndole que es ascii), a continuación, VOLVER a convertir los bytes de nuevo, como ascii-bytes.

    Que es innecesario para usted.

    • Incluso con BinaryReader no podía obtener resultado correcto. 🙁 (Ver edición)

Dejar respuesta

Please enter your comment!
Please enter your name here