J'ai un programme en écriture enregistrer un fichier texte en utilisant l'interface stdio. Il échange le 4 MSB avec le 4 LSB, sauf les caractères CR et/ou LF. J'essaie de "décoder" ce flux en utilisant un programme C#, mais je suis incapable d'obtenir les octets d'origine. J'ai essayé de changer le codage en UTF8, mais cela n'a pas fonctionné. J'ai aussi utilisé un BinaryReader créé en utilisant le 'Streamreader' 'sr', mais rien de bon n'est arrivé.FileStream et Codage
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 le fichier commence par 0xF2 0xF2 ..., je lis tout sauf la valeur attendue. Où est l'erreur? (c'est-à-dire 0xF6 0xF6).
En fait, ce code C faire le travail:
...
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);
Quel mal dans le code C#?
fin de ligne n'a pas de sens quand on traite les fichiers comme des octets "stupides", je pense donc que vous n'avez pas besoin de prendre en charge la "lecture ligne" dans un BinaryReader. Si vous voulez encore "décoder" tout votre fichier, cela n'a pas beaucoup de sens de le faire ligne par ligne. – jishi