奇怪,这有什么不同吗?

shaopr 2006-08-20 03:51:05
用BinaryReader读取一个二进制文件,
用这种形式:
CompName = br.ReadChars(8);
name = br.ReadChars(8);
读取时候name就变成乱码。
而这样读:
fs.Seek(8, SeekOrigin.Current);
name = br.ReadChars(8);
就正确。
百思不得其解,请问这是为什么呀?

...全文
101 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
shaopr 2006-08-20
  • 打赏
  • 举报
回复
没办法,用循环一个一个转,呵呵。
不过终于解决了。
非常感谢Knight94(愚翁) 的耐心指导!!
shaopr 2006-08-20
  • 打赏
  • 举报
回复
不好意思,再请教下
字节数组和字符数组如何转换?
Knight94 2006-08-20
  • 打赏
  • 举报
回复
如果你存的是有规律的话,那你可以先读出byte,然后再分别转
shaopr 2006-08-20
  • 打赏
  • 举报
回复
还是不行,
StnName = br.ReadChars(20);
StnNum = br.ReadInt32();
第一行是读字符数组,第二行是读数字,
可是我调试的时候发现数字却出现在StnName[19]里面了。
shaopr 2006-08-20
  • 打赏
  • 举报
回复
谢谢,我试试去。
Knight94 2006-08-20
  • 打赏
  • 举报
回复
你只要不把seek和getchar混用,其次设置stream的encoding。
shaopr 2006-08-20
  • 打赏
  • 举报
回复
谢谢Knight94(愚翁)
我还是个新手,
能不能麻烦你说明白点。
要怎么改呢?
Knight94 2006-08-20
  • 打赏
  • 举报
回复
你肯定文件游标位置不对的原因
shaopr 2006-08-20
  • 打赏
  • 举报
回复
可是我读第一次的时候是正确的,
到循环第二次的时候就乱了。
Knight94 2006-08-20
  • 打赏
  • 举报
回复
seek是以字节为标记,而char的读取不一定是单字节,要根据编码来判断,所以8个char的长度不一定是8个byte。

110,534

社区成员

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

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

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