c# 从二进制文件中读取结构体

bolv6666 2007-06-12 10:47:54
各位,请教了,情况是这样的:
现在需要从一个二进制文件中读取特定的数组,该二进制文件由10个大小为2432Bytes的结构体组成.每个结构体大致如下:
struct Rount
{
unsigned short int CTM[6];
unsigned short int MessageSize;
char ChannelID;
char MessageType;
short int IDSequence;
unsigned short int ;

unsigned char dBZ[460];
unsigned char Vel[920];
unsigned char SW[920];

}

用FileStream的方式一次读取2432Bytes好像只能放到byte数组中,问题就是我怎样才能把读出来的2432Bytes的数据放到结构体中,这样变量就可以对应起来,用Rount.dBZ的方式访问里面的数组,谢谢回复
...全文
1270 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
winbq5 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 soaringbird 的回复:]
用FileStream从你那个文件中一段一段(每段长2432Bytes)读出数据,放到一个byte[]中,然后取得这个byte[]的首地址指针(用fixed方式),再把这个指针强制转换成一个Rount指针,这时就可以访问其字段了。
[/Quote]

能否写出每一步的关键函数?谢谢了
wzd24 2007-06-12
  • 打赏
  • 举报
回复
你要自己写代码把数据填充到结构体中!
soaringbird 2007-06-12
  • 打赏
  • 举报
回复
用FileStream从你那个文件中一段一段(每段长2432Bytes)读出数据,放到一个byte[]中,然后取得这个byte[]的首地址指针(用fixed方式),再把这个指针强制转换成一个Rount指针,这时就可以访问其字段了。
Tassadar1979 2007-06-12
  • 打赏
  • 举报
回复
比如第一个值类型占据n个字节,把这n个字节提取出来,使用Convert中的类型转换就可以了.

int x = Convert.ToIn32(4长度字节流);
bolv6666 2007-06-12
  • 打赏
  • 举报
回复
另外,soaringbird() :能稍微再详细的讲讲吗?
soaringbird 2007-06-12
  • 打赏
  • 举报
回复
C#中结构这样定义:
public unsafe struct Rount
{
public fixed ushort CTM[6];
public ushort MessageSize;
public byte ChannelID;
public byte MessageType;
public short IDSequence;
public ushort XXXX;
public fixed byte dBZ[460];
public fixed byte Vel[920];
public fixed byte SW[920];
}

然后你就可以用类似于C/C++那样用指针对内存和结构操作了
Macosx 2007-06-12
  • 打赏
  • 举报
回复
这和把xml文件按类的方式读取没区别
Red_angelX 2007-06-12
  • 打赏
  • 举报
回复
一个int 4字节 一个char(c#)里1字节,short 2字节 慢慢读
小y的CSDN博客 2007-06-12
  • 打赏
  • 举报
回复
这样的结构体一般都是每个参数长度都是定死的
即便没有定死也能解析出长度
所以你就一个长度一个长度的读取然后组合
例如short 类型占16位长度
于是可以这样得到第一个short类型的数
byte[] socureb = new byte[2432] { 0x21,0x22,0x32,0x33………………};
byte[] tempb = new byte[16];
Array.Copy(socureb, 0, tempb, 0, 16);
Rount.CTM=BitConverter.ToInt16(tempb,0);

110,538

社区成员

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

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

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