using System; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; using System.IO; namespace Dat2Bin { public struct MTEMFreqFile { public byte No;//0-29 public ushort CycleLen;// public ushort CycleNum;// public int WaveStyle;// public float SampleRate;// public sbyte pro;// public byte OutCurrent;// public float Time;// public float Freq;//。 } [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] public struct MTEM_TInfo { public short day; // 日 public short month; // 月 public short year; // 年 2001-2999 public short hour; // 时 public short minute; // 分 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)] public string geo; // 工作地区 - 地名 public byte sec; // 秒 public byte met; // 记录方法代码: //0-31 public short end_year; // 年 2001-2999 public short end_month; // 月 public short end_day; // 日 public short end_hour; // 时 public short end_minute; // 分 public byte end_sec; // 秒 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)] public string standby1; // 备用 public sbyte pro; // ADC量化代码: public byte kan; // number of channels 通道数 public byte valid; // 该记录是否有效 public short ab1; // 发射源AB的第一个电极的位置 public short ab2; //发射源AB的第二个电极的位置 public short ab3; // 发射机的位置 public short res; // 接地电阻 public float Tok; // 发射电流 I(A) public float Voltage; // 发射电压 V(V) //32-71 public byte Tgu; // 发射波形: 1-doubling [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 17)] public string standby5; // 备用 public int Nom; // record of number 记录号与文件名相对应 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 6)] public string standby6; // 备用 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)] public string Fam; // surname of the operator 操作员 // 72-119 public int Lps; // number of points in record 记录的数据点数 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 18)] public string standby7; // 备用 public short Nst; // MeterNum 仪器号 /// /// 通道号 /// [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)] public string standby8; // 备用,临时改为通道号ch01-ch03 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 48)] public string Com; // string of the comment 注释行 //120-199 [MarshalAs(UnmanagedType.ByValArray, SizeConst = 90)] public short[] Isw; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 132)] public string standby9; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 24)] public ChInfo[] channel; } [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] public struct HEADInfo { public short day; // 日 public short month; // 月 public short year; // 年 2001-2999 public short hour; // 时 public short minute; // 分 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)] public string geo; // 工作地区 - 地名 public byte sec; // 秒 public byte met; // 记录方法代码: //0-31 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 21)] public string standby1; // 备用 public sbyte pro; // ADC量化代码: public byte kan; // number of channels 通道数 public byte standby2; // 备用 public short ab1; // Lab(meters) length of ab1, 发射源AB的长度 发射极距 public short ab2; // number AB 发射点号 public short ab3; // public short standby3; // 备用 public float Tok; // 发射电流 I(A) public uint standby4; // 备用 //32-71 public byte Tgu; // 发射波形: 1-doubling [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 17)] public string standby5; // 备用 public int Nom; // record of number 记录号与文件名相对应 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 6)] public string standby6; // 备用 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)] public string Fam; // surname of the operator 操作员 // 72-119 public int Lps; // number of points in record 记录的数据点数 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 18)] public string standby7; // 备用 public short Nst; // MeterNum 仪器号 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)] public string standby8; // 备用 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 48)] public string Com; // string of the comment 注释行 //120-199 [MarshalAs(UnmanagedType.ByValArray, SizeConst = 90)] public short[] Isw; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 132)] public string standby9; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 24)] public ChInfo[] channel; } // 406-511 [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]//按一个字节对齐 public struct ChInfo { public byte Idk; // public byte standby0; public sbyte Uko; // public byte Ufl; // 测站号 public short Pkt; // 测点号 public short Prf; // 测线号 public short ab; // 电极距 public short datatype; // 数据类型 //1)数据类型: // 1- Hall // 2- 电极 // 4- 接收 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)] public string standby1; public float X; //coordinate 'x' (not use) public float Y; //coordinate 'y' (not use) public float Z; //coordinate 'z' (not use) public float Ecs; // LSB [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 28)] public string standby2; } // 64*24=1536 public struct FreqFileHead { public MTEMFreqFile[] MTEMfreqfile; public int totalpoint ; //用于总采样点数label_totsize public float totaltime ; //采集总时间 public string SafeFileName; public string FileName; } [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]//按一个字节对齐 public struct SEGYFileHead { [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3200)] public byte[] ASCIIByte; public secPartSEGYFileHead secPartSEGYFileHead;/// } [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]//按一个字节对齐 public struct secPartSEGYFileHead { [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)] public byte[] standby;//Not use [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] channelNumber; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] standby2; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] sampleGap; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] standby3; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] samplePointerNumber; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] standby5; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] codeStyle; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 28)] public byte[] standby4; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] measureFormat; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 344)] public byte[] standby6; } [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]//按一个字节对齐 public struct SEGYChannelHead { [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public byte[] fileNumber; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public byte[] channelNumber; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public byte[] origNumber; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] standby; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] channelObject; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 50)] public byte[] standby1; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public byte[] xScale; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public byte[] yScale; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] scaleObject; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 24)] public byte[] standby2 ; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] channelSamplePointer; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] channelSampleGap; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 38)] public byte[] standby3; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] year; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] day; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] hour; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] mins; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] second; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] UTC; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 72)] public byte[] standby4 ; } }