当前位置:编程学习 > C#/ASP.NET >>

C#读写已知格式的二进制文件

新手求帮忙,谢谢各位啦!以下为数据格式
功率谱数据格式
    注:该文件读写时以八个字节对齐。
1 文件标识
类型 变量名 字节数 说明
char FileID[8] 8 文件标识,这里为WNDFFT
float VersionNo 4 数据格式版本号,两位整数,两位小数,这里为02.00
long int FileHeaderLength 4 表示文件头的长度,4位整数

2 基本参数
2.1 站址基本情况 struct  RADARSITE  SiteInfo
类型 变量名 字节数 说明
char Country[16] 16 国家名,文本格式输入
char Province[16] 16 省名,文本格式输入
char StationNumber[16] 16 区站号,文本格式输入
char Station[16] 16 台站名,文本格式输入,以台站名的汉语拼音输入
char RadarType[16] 16 雷达型号,文本格式输入
char
Longitude[16]
16
天线所在经度,文本格式输入
书写格式如:E75º15´28´´或E75/15/28
char
Latitude[16]
16
天线所在纬度,文本格式输入
书写格式如:N 31º52´1´´或 N31/52/1 
char Altitude[16] 16 海拔高度,以米为计数单位,文本格式输入
char Temp[40] 16 保留字
2.2 性能参数 struct  RADARPERFORMANCEPARAM  PerformanceInfo
类型 变量名 字节数 说明
unsigned int Ae 4 天线增益 (分贝),两位整数
float AgcWast 4 馈线损耗(分贝),两位整数,一位小数
float AngleE 4 东波束与铅垂线的夹角(度),两位整数,一位小数
float AngleW 4 西波束与铅垂线的夹角(度),两位整数,一位小数
float AngleS 4 南波束与铅垂线的夹角(度),两位整数,一位小数
float AngleN 4 北波束与铅垂线的夹角(度),两位整数,一位小数
float AngleR 4 中(行)波束与铅垂线的夹角(度),两位整数,一位小数
float AngleL 4 中(列)波束与铅垂线的夹角(度),两位整数,一位小数
unsigned int ScanBeamN 4 扫描波束数,一位整数
unsigned int SampleP 4 采样频率(兆赫兹),三位整数
unsigned int  WaveLength 4 发射波长 (毫米),四位整数
float Prp 4 脉冲重复频率(赫兹),五位整数
float PusleW 4 脉冲宽度(微秒),两位整数,一位小数
unsigned short HBeamW 2 水平波束宽度(度),两位整数
unsigned short VBeamW 2 垂直波束宽度(度),两位整数
float TranPp 4 发射峰值功率(千瓦),两位整数,一位小数
float TranAp 4 发射平均功率(千瓦),两位整数,一位小数
unsigned int StartSamplBin 4 起始采样库的距离高度,五位整数
unsigned int EndSamplBin 4 终止采样库的距离高度,五位整数
short int BinLength 2 距离库长(米),三位整数
char Temp[40] 40 保留字

2.3 观测参数struct  RADAROBSERVATIONPARAM  ObservationInfo
类型 变量名 字节数 说明
unsigned short SYear 2 观测记录开始时间(年),四位整数
unsigned char SMonth 1 观测记录开始时间(月),两位整数
unsigned char SDay 1 观测记录开始时间(日),两位整数
unsigned char SHour 1 观测记录开始时间(时),两位整数
unsigned char SMinute 1 观测记录开始时间(分),两位整数
unsigned char SSecond 1 观测记录开始时间(秒),两位整数
unsigned char TimeP 1 时间来源,一位整数
0:计算机时钟
1:GPS
2:其他
unsigned long int SMillisecond 4 秒的小数位(毫秒),三位整数
unsigned char Calibration 1 标校状态,一位
0:无标校
1:自动标校
2:一周内人工标校
3:一月内人工标校
short int BeamfxChange 2 波束方向改变
unsigned short EYear 2 观测记录结束时间(年),四位整数
unsigned char EMonth 1 观测记录结束时间(月),两位整数
unsigned char EDay 1 观测记录结束时间(日),两位整数
unsigned char EHour 1 观测记录结束时间(时),两位整数
unsigned char EMinute 1 观测记录结束时间(分),两位整数
unsigned char ESecond 1 观测记录结束时间(秒),两位整数
short int NNtr 2 非相干积累,三位整数
short int Ntr 2 相干积累,三位整数
short int Fft 2 Fft点数,四位整数
short int SpAver 2 谱平均数,三位整数
char BeamDir[10] 10 波束顺序标志(东、南、西、北、中(行)、中(列)分别用E、S、W、N、R、L表示,填在字符串相应的位置上),六位
float AzimuthE 4 东波束方位角修正值(度)
顺时针偏离为正,逆时针偏离为负
两位整数,一位小数
float AzimuthW 4 西波束方位角修正值(度)
顺时针偏离为正,逆时针偏离为负
两位整数,一位小数
float AzimuthS 4 南波束方位角修正值(度)
顺时针偏离为正,逆时针偏离为负
两位整数,一位小数
float AzimuthN 4 北波束方位角修正值(度)
顺时针偏离为正,逆时针偏离为负
两位整数,一位小数
char Temp[40] 40 保留字

2.4 功率谱数据
float  DspToDpDat [gate][ SpwidNum] SpwidNum---FFT点数
gate--------总距离库数(为高、中、低三模式距离库数之和)

DspToDpDat[0] [0]:库0的0号滤波器幅度;
DspToDpDat[0] [1]:库0的1号滤波器幅度;
DspToDpDat[0] [2]:库0的2号滤波器幅度;
DspToDpDat[0] [3]:库0的3号滤波器幅度;
……
DspToDpDat[0] [SpwidNum-2]:库0的SpwidNum-2号滤波器幅度;
DspToDpDat[0] [SpwidNum-1]:库0的SpwidNum-1号滤波器幅度;

DspToDpDat[1] [0]:库1的0号滤波器幅度;
DspToDpDat[1] [1]:库1的1号滤波器幅度;
DspToDpDat[1] [2]:库1的2号滤波器幅度;
DspToDpDat[1] [3]:库1的3号滤波器幅度;
……
DspToDpDat[1] [SpwidNum-2]:库1的SpwidNum-2号滤波器幅度;
DspToDpDat[1] [SpwidNum-1]:库1的SpwidNum-1号滤波器幅度;

……
DspToDpDat[gate-1] [0]:库gate-1的0号滤波器幅度;
DspToDpDat[gate-1] [1]:库gate-1的1号滤波器幅度;
DspToDpDat[gate-1] [2]:库gate-1的2号滤波器幅度;
DspToDpDat[gate-1] [3]:库gate-1的3号滤波器幅度;
……
DspToDpDat[gate-1] [SpwidNum-2]:库gate-1的SpwidNum-2号滤波器幅度;
DspToDpDat[gate-1] [SpwidNum-1]:库gate-1的SpwidNum-1号滤波器幅度;
注:谱线的编号依次从左到右展开,有几个波束方向就有几个 --------------------编程问答-------------------- 楼主,你要C#调用C++的动态库吧,你要把C++的Api函数和相关结构体贴出来。。。。 --------------------编程问答-------------------- 有什么问题? 可以参考:
//创建文件
fs = new FileStream(filename, FileMode.Open);
//使用二进制读取
BinaryReader br = new BinaryReader(fs);
Double d1 = br.ReadDouble();

C#读写二进制文件: http://maidini.blog.163.com/blog/static/377627042009112115421461/ --------------------编程问答-------------------- 关注一下
帮你顶顶先
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,