二进制数据中char类型的读取问题

winbq5 2010-10-01 02:46:10
有一个二进制文件,编码格式是GB2312的。

其中的long、short、int类型都可以用binaryreader.read32/16读出来,char[]可以用binaryreader.readbytes读取,然后编码成string类型。

但是char的不知道怎么读了,请大家帮忙看看怎么读char类型?

msdn的例子是这样的:
char[] memoryData = new char[5];
memoryData[i] = binReader.ReadChar();

我试了这样去读一个单独的char:
char[] memoryData = new char[1];
memoryData[0] = binReader.ReadChar();
但是得出的结果是:SYSTEM.CHAR[]

为什么呢?


下边是我试过的两种方法:
第一种:
char c = br.ReadChar();
Console.WriteLine(c.ToString());


这样读取的话,得出的竟然是一个笑脸,我真是晕啊,如图:

第二种:

byte[] bt = new byte[2000];
bt = br.ReadBytes(1);
str = GB.GetString(bt);
Console.WriteLine(str);
得出的结果还是一个笑脸图像,为什么呢?


请大家帮帮我,祝大家国庆快乐!
...全文
322 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
winbq5 2010-10-09
  • 打赏
  • 举报
回复
顶一下,如果数据本身是个字母,是不是应该这样:
Console.WriteLine(((string)c).ToString());
winbq5 2010-10-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jointan 的回复:]
在GB2312编码的文件中,读取char是没有意义的(存在双字节,高低位问题).

另外char中有的是可以显示的,有的是不可以显示的.
[/Quote]


二进制文件中,有很多是一个char的,碰到这种情况,该如何处理呢?
jointan 2010-10-01
  • 打赏
  • 举报
回复
在GB2312编码的文件中,读取char是没有意义的(存在双字节,高低位问题).

另外char中有的是可以显示的,有的是不可以显示的.
winbq5 2010-10-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jointan 的回复:]
Console.WriteLine(((short)c).ToString());
[/Quote]

哈哈,太感谢你了,能告诉我原理是什么吗?

我猜是不是这样的:原数据本身是个数字,所以要转换成short;如果原数据是个字母,那么就可以直接正常显示,不用转换成short了?
jointan 2010-10-01
  • 打赏
  • 举报
回复
Console.WriteLine(((short)c).ToString());
winbq5 2010-10-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyq11 的回复:]
char[] 如果放汉字,可能用UTF8编码
BinaryReader br = new BinaryReader (fs, Encoding.XXXX);
读char[]用br.ReadString
读char用br.ReadChar
[/Quote]

char c = br.ReadChar();
Console.WriteLine(c.ToString());
这样读后,是个笑脸图像
wuyq11 2010-10-01
  • 打赏
  • 举报
回复
char[] 如果放汉字,可能用UTF8编码
BinaryReader br = new BinaryReader (fs, Encoding.XXXX);
读char[]用br.ReadString
读char用br.ReadChar

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧