c#如何读取二进制数组

manica 2008-07-22 09:21:17
我现在需要写一个读取2进制流的接口定义的格式为
UserID 16字节DateTime 8字节 XXName 32字节
说明 DateTime和XXName 是以数组形式写入2进制数据的,输出的效果:
|user1 20080906152536 Name1 20080206152536 Name2 20080106152536 Name3
|user2 20080906152536 Name1 20080206152536 Name2 20080106152536 Name3
|user3 20080906152536 Name1 20080206152536 Name2 20080106152536 Name3
中间是没有空格的,我为了大家能看清楚我就加了空格
这个我该怎么读取
FileStream TempStream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
BinaryReader TempReader = new BinaryReader(TempStream, System.Text.Encoding.UTF8);
写到这我就写不下去了,我读出的总是乱码,尤其是时间段,其他的还能看的到

请高手帮个小忙,我最文件流不是很熟悉,以前没有写过这个方面的程序
...全文
654 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
hbdn520 2009-02-13
  • 打赏
  • 举报
回复
顶下 好帖子
hs518 2008-10-04
  • 打赏
  • 举报
回复
System.Text.Encoding.Default.GetString(br.ReadBytes(8));
改成
System.Text.Encoding。Unicode.GetString(br.ReadBytes(8));
就可以解决问题
manica 2008-07-22
  • 打赏
  • 举报
回复
//type
// TWnOneUserAction = packed record
// DateTime: TDateTime;
// PageName: string[32];
// end;
// TWnUserActionList = array of TWnOneUserAction;
//procedure TForm1.Button1Click(Sender: TObject);
//var
// f: File;
// s: string[16];
// i: Integer;
// larray: TWnUserActionList;
//begin
// AssignFile(f, 'd:\a.dat');
// try
// Reset(f, 1);
// BlockRead(f, Pointer(@s)^, sizeof(s));
// showmessage(s);
// SetLength(larray, 8);
// BlockRead(f, Pointer(@larray[0])^, sizeof(TWnOneUserAction) * 8);
// for i := 0 to 7 do
// begin
// memo1.lines.add(larray[i].PageName);
// memo1.lines.add(FormatDateTime('yyyymmdd hh:mm:dd', larray[i].DateTime));
// end;
// finally
// closeFile(f);
// end;
//Userid 16字节
//DateTime 8字节 double
//PageName 32字节


这个是delphi的程序,协议应该不会错
hongqi162 2008-07-22
  • 打赏
  • 举报
回复
协议没有错吧,我总觉着你取多了呢?
manica 2008-07-22
  • 打赏
  • 举报
回复
别说Default 其他的我全部试了一遍

因该不是这个问题,还是对应取值的问题
-----------------------------
我几乎把所有的编码类型全部试了一遍,全部不行

string UserID = Encoding.UTF8.GetString(TempReader.ReadBytes(16));

这个是我取出的userID
USER1L@\0P�P@"

这个前面有个 ¦符号,是不是要去掉? 我怎样取这个

----------------------

现在最关键的是连文件头取出来都是错误的,后面那就更错啊
一品梅 2008-07-22
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 manica 的回复:]
17楼写的与我写的有什么不同吗?我没有看出来啊
[/Quote]
BinaryReader TempReader = new BinaryReader(TempStream, System.Text.Encoding.UTF8);
改成
BinaryReader TempReader = new BinaryReader(TempStream, System.Text.Encoding.Default); 试试
hongqi162 2008-07-22
  • 打赏
  • 举报
回复
我用的是Encoding.Default你用的是Encoding.UTF8
一品梅 2008-07-22
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 only_endure 的回复:]
BinaryReader TempReader = new BinaryReader(TempStream, System.Text.Encoding.UTF8);
改成
BinaryReader TempReader = new BinaryReader(TempStream, System.Text.Encoding.Default); 试试
[/Quote]
manica 2008-07-22
  • 打赏
  • 举报
回复
17楼写的与我写的有什么不同吗?我没有看出来啊
hongqi162 2008-07-22
  • 打赏
  • 举报
回复
试过我在17楼写的代码了没有?
manica 2008-07-22
  • 打赏
  • 举报
回复
高手最好能给些具体的写法,我第一写这个c#
delphi写这个很简单,我就是不知道怎样翻译过来
greystar 2008-07-22
  • 打赏
  • 举报
回复
BitConverter来处理byte[],不过你要先取数你的数据,如整型是由4个字节组成的.那就取你的byte[]数组中的0-3位数据,
manica 2008-07-22
  • 打赏
  • 举报
回复
我几乎把所有的编码类型全部试了一遍,全部不行

string UserID = Encoding.UTF8.GetString(TempReader.ReadBytes(16));

这个是我取出的userID
USER1L@\0P�P@"

这个前面有个|符号,是不是要去掉? 我怎样取这个
张扬的狄仁杰 2008-07-22
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 hongqi162 的回复:]
C# codestring filename = "D:/a.dat";
//System.Text.Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
FileStream TempStream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
BinaryReader TempReader = new BinaryReader(TempStream);
string UserID = Encoding.Default.GetString(TempReader.ReadBytes(16));

UserActDetail uActDetail = new UserActDetail();
if (U…
[/Quote]
一品梅 2008-07-22
  • 打赏
  • 举报
回复
BinaryReader TempReader = new BinaryReader(TempStream, System.Text.Encoding.UTF8);
改成
BinaryReader TempReader = new BinaryReader(TempStream, System.Text.Encoding.Default); 试试
一品梅 2008-07-22
  • 打赏
  • 举报
回复
BinaryReader TempReader = new BinaryReader(TempStream, System.Text.Encoding.UTF8);
改成
BinaryReader TempReader = new BinaryReader(TempStream, System.Text.Encodiong.Default); 试试
manica 2008-07-22
  • 打赏
  • 举报
回复
我开始写的是8,后来我乱改的,郁闷
一品梅 2008-07-22
  • 打赏
  • 举报
回复
BinaryReader Methods
你仔细地看看方法列表,看看哪个符合你的要求.
jl_lsj 2008-07-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 kbryant 的回复:]
友情up
[/Quote]
yagebu1983 2008-07-22
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 hongqi162 的回复:]
你读取16字节后需要做一次bin to string的转换才可以的,如果你读取的字节数没有问题那么问题就出现在转换上了,readbytes每读取一次都将提升相应的读取字节数
[/Quote]
加载更多回复(19)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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