有一二进制文件格式如下:
typedef struct tagGridDataFileHeader
{
short nDataType; //资料类型,2个字节
CTime tSourceDataStartTime;//源数据的开始时间信息,对于预报结果文件,该值是最后一个实测数据的开始时间信息,4个字节
CTime tSourceDataEndTime;//源数据的结束时间信息,对于预报结果文件,该值是最后一个实测数据的开始时间信息,4个字节
int nMinutes;//预警时间长度信息(分钟),对于实测数据,该值为0,4个字节
float fGridDataLeftLongitude;//左边的经度(度),4个字节
float fGridDataTopLatitude;//上边的纬度(度),4个字节
float fGridDataCenterLongitude;//中心经度(度),4个字节
float fGridDataCenterLatitude;//中心纬度(度),4个字节
float fGridDataDeltaX;//横向格距(KM),4个字节
float fGridDataDeltaY;//纵向格距(KM),4个字节
int nGridDataXNum;//横向格点数,4个字节
int nGridDataYNum;//纵向格点数,4个字节
short nType;//产品的类型,2个字节,0为实测数据的格点化产品,1为预警产品
float fTemp[10];//备用数据,40个字节
}我现在想把它一一读出显示在文本中,我试按以下写,却写不下去,该怎么写?谢谢了!
string StrTxtFileName = @"F:\DFPP200909221610.DAT";
FileStream fs = new FileStream(StrTxtFileName, FileMode.Open);
BinaryReader rdr = new BinaryReader(fs);
Console.WriteLine(rdr.ReadUInt16().ToString());//读nDataType数据
//读时间数据???tSourceDataStartTime
//fs.Position += 10;
fs.Dispose();
fs.Close();
rdr.Close();
typedef struct tagGridDataFileHeader
{
short nDataType; //资料类型,2个字节
CTime tSourceDataStartTime;//源数据的开始时间信息,对于预报结果文件,该值是最后一个实测数据的开始时间信息,4个字节
CTime tSourceDataEndTime;//源数据的结束时间信息,对于预报结果文件,该值是最后一个实测数据的开始时间信息,4个字节
int nMinutes;//预警时间长度信息(分钟),对于实测数据,该值为0,4个字节
float fGridDataLeftLongitude;//左边的经度(度),4个字节
float fGridDataTopLatitude;//上边的纬度(度),4个字节
float fGridDataCenterLongitude;//中心经度(度),4个字节
float fGridDataCenterLatitude;//中心纬度(度),4个字节
float fGridDataDeltaX;//横向格距(KM),4个字节
float fGridDataDeltaY;//纵向格距(KM),4个字节
int nGridDataXNum;//横向格点数,4个字节
int nGridDataYNum;//纵向格点数,4个字节
short nType;//产品的类型,2个字节,0为实测数据的格点化产品,1为预警产品
float fTemp[10];//备用数据,40个字节
}我现在想把它一一读出显示在文本中,我试按以下写,却写不下去,该怎么写?谢谢了!
string StrTxtFileName = @"F:\DFPP200909221610.DAT";
FileStream fs = new FileStream(StrTxtFileName, FileMode.Open);
BinaryReader rdr = new BinaryReader(fs);
Console.WriteLine(rdr.ReadUInt16().ToString());//读nDataType数据
//读时间数据???tSourceDataStartTime
//fs.Position += 10;
fs.Dispose();
fs.Close();
rdr.Close();
m_endtime =CTime::GetCurrentTime();//当前时间
string path = @"F:\DFPP200909221610.DAT";
FileStream fs = File.Open(path , FileMode.OpenOrCreate , FileAccess.Read);
byte[] datacatch;
using (BinaryReader br=new BinaryReader(fs)) {
datacatch=br.ReadBytes((int)fs.Length);
} Console.WriteLine(Encoding.Default.GetString(datacatch));//读nDataType数据
//读时间数据???tSourceDataStartTime
//fs.Position += 10;
}//先做到这步
读出来:byte[] bytes=new byte[88];//文件读取出来的字节放在这里然后可以分别处理
如:
short m = BitConverter.ToUInt16(bytes, 0);//从数组索引0处开始读2个字节转换成uint16
float f = BitConverter.ToSingle(bytes, 33);//从33字节处读取4个字节转换成单浮点数
标准的值类型都能用BitConverter读取
至于Ctime要知道其定义才可以(关于字节排列先后顺序的)你试试吧
关键是cTime的类型信息。如果知道可以计算数据个数,利用循环按照字节读取,存储或显示!