二进制文件读取的四个问题

winbq5 2010-08-23 11:05:39
读取二进制文件,该文件中有汉字、英文字母、数字、符号这四种类型


第一个问题:
BinaryReader br = new BinaryReader(brfs, Encoding.GetEncoding("gb2312"));
Encoding GB = Encoding .GetEncoding ("gb2312");


直接读取字符:
char[] chbuffer = new char[20];
chbuffer = br.ReadChars(2);

显示两个汉字:中国,分别存在char[1]和char[2]中



byte[] bt = new byte[2];
bt = br.ReadBytes(2);
str = GB.GetString(bt);
显示一个汉字:中

问题:char类型在二进制文件中占2个字节?我查资料怎么说是C#的char是一个字节



第二个问题:
读完“中国”这两个汉字后,接下来是个int的数字,读取方法为:

bt = br.ReadBytes(4);
str = GB.GetString(bt);
Console.WriteLine(bt.ToString());

显示为:System.Byte[]

为什么不能正确显示数字呢?因为我想数字也是gb2312编码里的一部分啊!



第三个问题:
上边的不能正常读取数字,但是这样可以:
int i = br.ReadInt32();
Console.WriteLine(i.ToString());
不知道为什么?

我的理解:Binaryreader.readint32是先调用binaryreader.readbyte(4),再用“gb2312”进行编码,不知道我理解的对不对?



第四个问题:
关于FileStream 和BinaryReader 的关系,如下:

FileStream brfs = File .OpenRead (BinAdd );
BinaryReader br = new BinaryReader(brfs);

可不可以这样理解:BinaryReader 是建立在FileStream 的基础之上的,当BinaryReader.ReadInt32()之后,用FileStream.Seek()对文件流的当前位置进行重新设置,往前挪4个字节,那么再次执行BinaryReader.ReadInt32(),是否所读结果和前一次的BinaryReader.ReadInt32()所读数据一样?
...全文
108 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
铛铛 2010-08-24
  • 打赏
  • 举报
回复

string str = "中国";
byte[] buff = Encoding.GetEncoding("gb2312").GetBytes(str);
MessageBox.Show(buff.Length.ToString());//此处结果是4

char c = str[0];
byte[] buff2 = Encoding.GetEncoding("gb2312").GetBytes(new char[] { c });
MessageBox.Show(buff2.Length.ToString());//此处结果是2

C#中char是两个字节,你可以复制过去试试
q107770540 2010-08-23
  • 打赏
  • 举报
回复
(char)'a'是一个字节,(char)'中'是两个字节
q107770540 2010-08-23
  • 打赏
  • 举报
回复
C#中char是两个字节

110,536

社区成员

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

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

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