文件二进制读取问题
我已二进制读取一个文件,为什么用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"!!!!!!!!!
请各位大人说明一下是为什么?还有要怎么才能把文件已字符串形式全部读出并保存的字符串中?!
问题点数:50、回复次数:18Top
1 楼fsp666666(嗷嗷地费戈)回复于 2005-03-03 10:02:53 得分 10
1。为什么?答:不知道:(
2。保存到字符串?答:StreamReader sr = new StreamReader( Filename ); string str = sr.ReadToEnd;sr.Close();Top
2 楼ncount(基督山伯爵)回复于 2005-03-03 10:11:19 得分 10
用r.ReadByte()是读出100个字节的2进制,有很多字节在unicode并没有对应可显示字符,所以无法输出。Top
3 楼web_gus(树欲静而风不止)回复于 2005-03-03 10:28:25 得分 0
upTop
4 楼1982pc()回复于 2005-03-03 15:55:19 得分 0
回 fsp666666(嗷嗷地费戈):
用你的方法和我用ReadChar()读出的结果一样~~~~~:(
回ncount(基督山伯爵):
读出的不是二进制吧,就算你说的对,那么没有对应字符就不显示.那有的应该显示吧,可是只显示一点儿,这是为什么?
期待大人出现~~~~~~
怎么才能实现啊,就像用文本方式打开.exe文件所得到的字符串!!!!!!Top
5 楼liulxmooo(娃娃)回复于 2005-03-03 16:00:10 得分 0
upTop
6 楼1982pc()回复于 2005-03-03 16:20:33 得分 0
怎么没人接啊,我顶!!!Top
7 楼ncount(基督山伯爵)回复于 2005-03-03 18:11:05 得分 0
upTop
8 楼1982pc()回复于 2005-03-03 19:08:56 得分 0
是不是啊,这个问题真的很难吗?+++++++分了~~~Top
9 楼windinwing(潇笑)回复于 2005-03-03 19:30:10 得分 10
char 占8字节,byte占4字节
ReadChar() 时如果读取流不是字符编码,那么会做抛弃处理,也就是说读不出任何东西
而byte是二进制流,不是字符也可以读出
这就是问题所在Top
10 楼JasonHeung(拥有一切不过就这样笑着哭)回复于 2005-03-03 19:34:36 得分 10
你可以用r.ReadString();Top
11 楼1982pc()回复于 2005-03-03 19:37:38 得分 0
哦,但是我用文本打开.exe文件时,明明看见还有其他字符,但为什么我就算读1000个还是只有"
MZ"两个字符呢?!
还有就是怎么才能实现像用文本方式打开.exe文件所看到的字符串!!!!!!Top
12 楼1982pc()回复于 2005-03-03 21:46:13 得分 0
回JasonHeung(拥有一切也只不过这样笑着哭)结果一样的!Top
13 楼1982pc()回复于 2005-03-03 22:49:41 得分 0
哎睡觉前再顶一次吧!Top
14 楼sanshi2(磊)回复于 2005-03-03 23:55:14 得分 0
先读取字节码,然后把字节码转化为字符串Top
15 楼wuyazhe(wyz&xyl)回复于 2005-03-04 00:00:02 得分 0
upTop
16 楼1982pc()回复于 2005-03-04 17:49:44 得分 0
回sanshi2(磊):
还是不行~~Top
17 楼tiaoci(我挑刺,我快乐)回复于 2005-03-04 18:03:26 得分 5
因为ReadChar 是按文本模式读取的么,
对于非文本的字符会自动过滤,自然读不进来了
要读进字符串,首先你要确定读进来的数据按什么方式编码
然后先按二进制方式读取,然后用Encoding.GetString转成字符串
Top
18 楼tiaoci(我挑刺,我快乐)回复于 2005-03-04 18:22:52 得分 5
你看到的 "791030..."并不是字符串,而是byte的值
要转成这种格式,只能自己手工转byte[]的值
Top




