gpt4 book ai didi

c# - 文件流和编码

转载 作者:行者123 更新时间:2023-11-30 17:23:05 25 4
gpt4 key购买 nike

我有一个程序使用 stdio 接口(interface)写入保存文本文件。它将 4 MSB 与 4 LSB 交换,字符 CR 和/或 LF 除外。

我正在尝试使用 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 构造:

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

我认为这构建了一个基于 StreaReader 的 BinaryReader,它“翻译”来自文件的字符。

使用这段代码,实际上效果很好:

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

我想知道是否可以使用文本流阅读器逐行读取此类数据,因为在“编码”阶段会保留行结尾。

关于c# - 文件流和编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2375451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com