나는 stdio 인터페이스를 사용하여 텍스트 파일을 저장하는 프로그램을 작성했습니다. CRB 및/또는 LF 문자를 제외하고 4 MSB를 4 LSB로 바꿉니다.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로 변경하려고했지만 작동하지 않았습니다. 나는 또한 'sr'StreamReader를 사용하여 만든 BinaryReader를 사용했지만 좋은 것은 없습니다.
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