|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
//主要功能:
|
|
|
// SegY读写类
|
|
|
//
|
|
|
//程序编写: 2008-11-09
|
|
|
//
|
|
|
//
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
#pragma once
|
|
|
#include "file64.h"
|
|
|
|
|
|
#if !defined(__FILE64_SEGY__)
|
|
|
#define __FILE64_SEGY__
|
|
|
|
|
|
//nFormatCode is
|
|
|
//1 = 4-byte IBM floating-point
|
|
|
//2 = 4-byte, two's complement integer
|
|
|
//3 = 2-byte, two's complement integer
|
|
|
//4 = 4-byte fixed-point with gain (obsolete)
|
|
|
//5 = 4-byte IEEE floating-point
|
|
|
//6 = Not currently used
|
|
|
//7 = Not currently used
|
|
|
//8 = 1-byte, two's complement integer
|
|
|
|
|
|
//CreateIoFile(...) parameter
|
|
|
|
|
|
namespace NFile64
|
|
|
{
|
|
|
|
|
|
#define FILE_DEFAULT 0
|
|
|
#define FILE_MAPPING 1
|
|
|
#define FILE_HTTP 2
|
|
|
|
|
|
class CFileSegy :
|
|
|
public CFile64
|
|
|
{
|
|
|
public:
|
|
|
CFileSegy(void);
|
|
|
virtual ~CFileSegy(void);
|
|
|
|
|
|
enum EDataType
|
|
|
{
|
|
|
typeError = 0, //错误类型
|
|
|
typeIbmFloat = 1, // 4-byte IBM floating-point
|
|
|
typeIbmLong = 2, // 4-byte, two's complement integer
|
|
|
typeIbmShort = 3, // 2-byte, two's complement integer
|
|
|
typeIbmGainLong = 4, // 4-byte fixed-point with gain (obsolete)
|
|
|
typeIeeFloat = 5, // IEEE floating-point
|
|
|
// 8-bit, integer
|
|
|
// 7 为了地震剖面格式中的扩展
|
|
|
typeChar = 8, // signed char (1 byte)
|
|
|
typeIbmUShort = 9, // 2-byte, two's complement integer
|
|
|
typeIeeShort = 10, //
|
|
|
typeIeeLong = 11, //
|
|
|
typeIeeDouble = 12, // IEEE双精度实数(8字节)
|
|
|
};
|
|
|
//针对地震剖面(SEGY文件)所做
|
|
|
static int SizeofDataType(EDataType dt); //获得数据类型的长度
|
|
|
static CString GetFormatString(EDataType code);
|
|
|
static EDataType GetFormatCode(CString name);
|
|
|
|
|
|
//目前仅生成CFileSegy或CFileSegyMapping对象
|
|
|
static CFileSegy* CreateIoFile(int nCreateMode = FILE_DEFAULT); //new一个新对象
|
|
|
|
|
|
double ReadBinary(EDataType dt, int IsPC); //读取一个数据
|
|
|
int ReadBinary(float * x, int num, EDataType dt, int IsSwap);
|
|
|
int ReadBinary(double* x, int num, EDataType dt, int IsSwap);
|
|
|
|
|
|
double GetBinary(BYTE *lpValue, EDataType dt, int IsSwap);
|
|
|
int GetBinary(BYTE *lpValue, EDataType dt, int IsSwap, void* toValue); //结果输出在toValue中,返回0表示不成功
|
|
|
|
|
|
int WriteBinary(double v, EDataType dt, int IsSwap); //写一个数据
|
|
|
int WriteBinary(double *pv, int num, EDataType dt, int IsSwap);
|
|
|
|
|
|
long FloatToLong(double value);
|
|
|
};
|
|
|
|
|
|
};
|
|
|
|
|
|
using namespace NFile64;
|
|
|
|
|
|
//判断是否是HTTP形式的网络文件
|
|
|
extern bool IsURL(LPCTSTR name, DWORD *pdwServiceType=NULL);
|
|
|
|
|
|
inline long NFile64::CFileSegy::FloatToLong(double value)
|
|
|
{
|
|
|
if(value<0) return (long)(value-0.5);
|
|
|
return (long)(value+0.5);
|
|
|
}
|
|
|
|
|
|
#endif // !defined(__FILE64_SEGY__)
|
|
|
|
|
|
|