У меня есть программа для записи текстового файла с использованием интерфейса stdio. Он заменяет 4 MSB на 4 LSB, за исключением символов CR и/или LF.FileStream и кодировка
Я пытаюсь «декодировать» этот поток с помощью программы на C#, но я не могу получить исходные байты.
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);
Я попытался изменить кодировку в UTF8, но это не сработало. Я также использовал BinaryReader, созданный с помощью 'sr' StreamReader, но ничего хорошего не произошло.
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);
Если файл начинается с 0xF2 0xF2 ..., я читаю все, кроме ожидаемого значения. Где ошибка? (то есть: 0xF6 0xF6).
На самом деле это C код сделать работу:
...
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);
Что плохого в коде C#?
строк-концов не имеет смысла при обработке файлов как «немых» байтов, я думаю, что вам не нужно поддерживать «чтение строки» в BinaryReader. Но это действительно проблема для вас? Если вы все еще хотите «декодировать» весь ваш файл, это не имеет смысла делать это по очереди. – jishi