文件二进制读取问题

1982pc 2005-03-03 09:56:51
我已二进制读取一个文件,为什么用ReadChar()读取只能读出几个字符,可是我用ReadByte却能读出很多东西呢?!
示例代码如下:
char[] buffer = new char[100];
FileStream fs = new FileStream(dlg.FileName,FileMode.Open,FileAccess.Read);
BinaryReader r = new BinaryReader(fs);
StringBuilder buf = new StringBuilder();
for(int i = 0;i < 100;i++)
{
buf.Insert(i,r.ReadByte());
}
以一个.exe的文件为例,当r.ReadByte()时可以读出"791030004000220010000000600000000000000
00000000000000000000081001311019231172381113111119139911113910182161110107920971403111412
21505044305684305804"
可是以ReadChar()时却只能读出"MZ"!!!!!!!!!


请各位大人说明一下是为什么?还有要怎么才能把文件已字符串形式全部读出并保存的字符串中?!
...全文
199 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
兔子-顾问 2005-03-04
  • 打赏
  • 举报
回复
up
tiaoci 2005-03-04
  • 打赏
  • 举报
回复
你看到的 "791030..."并不是字符串,而是byte的值

要转成这种格式,只能自己手工转byte[]的值
tiaoci 2005-03-04
  • 打赏
  • 举报
回复
因为ReadChar 是按文本模式读取的么,

对于非文本的字符会自动过滤,自然读不进来了

要读进字符串,首先你要确定读进来的数据按什么方式编码

然后先按二进制方式读取,然后用Encoding.GetString转成字符串
1982pc 2005-03-04
  • 打赏
  • 举报
回复
回sanshi2(磊):
还是不行~~
sanshi2 2005-03-03
  • 打赏
  • 举报
回复
先读取字节码,然后把字节码转化为字符串
1982pc 2005-03-03
  • 打赏
  • 举报
回复
哎睡觉前再顶一次吧!
web_gus 2005-03-03
  • 打赏
  • 举报
回复
up
ncount 2005-03-03
  • 打赏
  • 举报
回复
用r.ReadByte()是读出100个字节的2进制,有很多字节在unicode并没有对应可显示字符,所以无法输出。
以前的大菠萝 2005-03-03
  • 打赏
  • 举报
回复
1。为什么?答:不知道:(
2。保存到字符串?答:StreamReader sr = new StreamReader( Filename ); string str = sr.ReadToEnd;sr.Close();
1982pc 2005-03-03
  • 打赏
  • 举报
回复
回JasonHeung(拥有一切也只不过这样笑着哭)结果一样的!
1982pc 2005-03-03
  • 打赏
  • 举报
回复
哦,但是我用文本打开.exe文件时,明明看见还有其他字符,但为什么我就算读1000个还是只有"
MZ"两个字符呢?!
还有就是怎么才能实现像用文本方式打开.exe文件所看到的字符串!!!!!!
JasonHeung 2005-03-03
  • 打赏
  • 举报
回复
你可以用r.ReadString();
windinwing 2005-03-03
  • 打赏
  • 举报
回复
char 占8字节,byte占4字节
ReadChar() 时如果读取流不是字符编码,那么会做抛弃处理,也就是说读不出任何东西
而byte是二进制流,不是字符也可以读出
这就是问题所在
1982pc 2005-03-03
  • 打赏
  • 举报
回复
是不是啊,这个问题真的很难吗?+++++++分了~~~
ncount 2005-03-03
  • 打赏
  • 举报
回复
up
1982pc 2005-03-03
  • 打赏
  • 举报
回复
怎么没人接啊,我顶!!!
liulxmooo 2005-03-03
  • 打赏
  • 举报
回复
up
1982pc 2005-03-03
  • 打赏
  • 举报
回复
回 fsp666666(嗷嗷地费戈):
用你的方法和我用ReadChar()读出的结果一样~~~~~:(

回ncount(基督山伯爵):
读出的不是二进制吧,就算你说的对,那么没有对应字符就不显示.那有的应该显示吧,可是只显示一点儿,这是为什么?
期待大人出现~~~~~~
怎么才能实现啊,就像用文本方式打开.exe文件所得到的字符串!!!!!!

110,538

社区成员

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

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

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