高手救命 c#中如何读取二进制结构体文件:
文件结构体中有 :
unsigned short int Size;
char ID;
char Type;
short int IDS;
unsigned short int Date;
等数据类型
请问该怎么读取呀,小弟刚接触c#,求高手救命呀 。
文件结构体中有 :
unsigned short int Size;
char ID;
char Type;
short int IDS;
unsigned short int Date;
等数据类型
请问该怎么读取呀,小弟刚接触c#,求高手救命呀 。
解决方案 »
- 发一个贴 求教大神 关于DataGridView中添加的CheckBox如何选中的问题
- TEXTBOX如何判断是否输入的是有效float数字
- [求助]请大家介绍下编码规范问题。。。
- 请教各位高手ds.merge问题 ,很着急 ,在线等
- C#中confirm不起作用了?在线等 !
- 基于win2003的vs.net 2003 开发的WEB项目,在IE6.0下浏览是没有问题,但到IE5.0就有问题,怎么回事?
- c#里如何设置enter键的默认按钮?
- 求助内存表操作!
- 在c#中创建ASP.NET Web应用程序时出现的问题?
- 请问如何用c#实现net send功能?送分啦
- 关于c#三层架构类的调用问题~!~~
- 如何实现图片去除背景并叠加到另一个图片去?
marshal.Ptrtostructure
typedef struct{
unsigned short int head[6];
unsigned short int Size;
char ID;
char Type;
short int IDS;
unsigned short int Date;
}DATAP;我已经把它转换为c#里面的不安全结构体了
如下:
public unsafe struct DATAPACKET
{
public fixed ushort head[6];
public ushort Size;
public byte ID;
public byte Type;
public short IDS;
public ushort Date;
}可是下面怎么做呢:?已经知道这个结构体的字节长度,和整个文件的长度。
恳请高手给我这个菜鸟一点代码级的指点,谢谢救命啊。
/// 读取二进制文件
/// </summary>
/// <param name="fileName">文件名</param>
public void ReadMyBinaryFile(string fileName)
{
FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
/*
* public unsafe struct DATAPACKET
{
public fixed ushort head[6];
public ushort Size;
public byte ID;
public byte Type;
public short IDS;
public ushort Date;
}
*/
int iFileLength = fileStream.Length;//文件长度
int iStructLength = 20;//结构体的字节长度
int iTimes = iFileLength / iStructLength;//共有多少个字节 DATAPACKET tmp;
byte[] byTmp = new byte[2]; for (int i = 0; i < iTimes; i++)
{
//读头部六个短整型字节
for (int j = 0; j < 6; j++)
{
if (fileStream.Read(byTmp, 0, 2) != 2)
{
Console.WriteLine("file read error!");
return;
}
tmp.head[j] = BitConverter.ToUInt16(byTmp, 0);
}
//读大小
if (fileStream.Read(byTmp, 0, 2) != 2)
{
Console.WriteLine("file read error!");
return;
}
tmp.Size= BitConverter.ToUInt16(byTmp, 0);
//读id
tmp.ID = fileStream.ReadByte();
//读类型
tmp.Type = fileStream.ReadByte();
//读ids
if (fileStream.Read(byTmp, 0, 2) != 2)
{
Console.WriteLine("file read error!");
return;
}
tmp.IDS = BitConverter.ToInt16(byTmp, 0);
//读日期
if (fileStream.Read(byTmp, 0, 2) != 2)
{
Console.WriteLine("file read error!");
return;
}
tmp.Date = BitConverter.ToUInt16(byTmp, 0);
/*
.........对读出变量进行处理
*/ }
/*
.....后续处理
*/
fileStream.Close(); }