• 大小: 7.97MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-10-05
  • 语言: C/C++
  • 标签: C++  SEGY  

资源简介

采用C++ 文件流形式读取和写入地震标准格式SEGY文件。

资源截图

代码片段和文件信息

/*=========================================================================

  Program:   Visualization Toolkit
  Module:    vtkPlane.h

  Copyright (c) Ken Martin Will Schroeder Bill Lorensen
  All rights reserved.
  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.

     This software is distributed WITHOUT ANY WARRANTY; without even
     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
     PURPOSE.  See the above copyright notice for more information.

=========================================================================*/

#include “IOUtil.h“

#include 
#include 

IOUtil* IOUtil::instance = NULL;

IOUtil::IOUtil()
{
    isBigEndian = checkIfBigEndian();
}

int IOUtil::readShortInteger(int pos ifstream &in) {
    in.seekg(pos ios_base::beg);
    char buffer[2];
    in.read(buffer sizeof(buffer));

    if (!isBigEndian) {
        swap(buffer buffer + 1);
    }

    short num;
    memcpy(&num buffer 2);
    return num;
}

void IOUtil::writeShortInteger(short num int pos ofstream &out)
{
    out.seekp(pos ios_base::beg);
    char buffer[2];
    memcpy(buffer &num 2);

    if (!isBigEndian) {
        swap(buffer buffer + 1);
    }

    out.write(buffer sizeof(buffer));
}

int IOUtil::readLongInteger(ifstream &in int pos) {
    in.seekg(pos ios_base::beg);
    char buffer[4];
    in.read(buffer sizeof(buffer));

    if (!isBigEndian) {
        swap(buffer buffer + 3);
        swap(buffer + 1 buffer + 2);
    }

    int num;
    memcpy(&num buffer 4);
    return num;
}

void IOUtil::writeLongInteger(int num int pos ofstream &out)
{
    out.seekp(pos ios_base::beg);
    char buffer[4];
    memcpy(buffer &num 4);

    if (!isBigEndian) {
        swap(buffer buffer + 3);
        swap(buffer + 1 buffer + 2);
    }

    out.write(buffer sizeof(buffer));
}

float IOUtil::readFloat(ifstream &in) {
    char buffer[4];
    in.read(buffer sizeof(buffer));

    if (!isBigEndian) {
        swap(buffer buffer + 3);
        swap(buffer + 1 buffer + 2);
    }

    float num;
    memcpy(&num buffer 4);
    return num;
}

void IOUtil::writeFloat(float num ofstream &out)
{
    char buffer[4];
    memcpy(buffer &num  4);

    if (!isBigEndian) {
        swap(buffer buffer + 3);
        swap(buffer + 1 buffer + 2);
    }

    out.write(buffer sizeof(buffer));
}

char IOUtil::readChar(ifstream &in) {
    char buffer;
    in.read(&buffer sizeof(buffer));
    return buffer;
}

void IOUtil::writeChar(char c ofstream &out)
{
    out.write(&csizeof(c));
}

void IOUtil::swap(char *a char *b) {
    char temp = *a;
    *a = *b;
    *b = temp;
}

int IOUtil::getFileSize(ifstream &in) {
    in.seekg(0 ios_base::end);
    return in.tellg();
}


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-09-20 15:55  data\
     文件      255018  2016-11-17 23:45  data\Events.rdv
     文件     1658760  2016-11-17 23:45  data\lineA.sgy
     文件      665664  2016-11-17 23:45  data\lineB.sgy
     文件      640200  2016-11-17 23:45  data\lineC.sgy
     文件      882108  2016-11-17 23:45  data\lineD.sgy
     文件      474684  2016-11-17 23:45  data\lineE.sgy
     文件     6508764  2016-11-17 23:45  data\waha8.sgy
     文件        2770  2018-09-20 15:41  IOUtil.cpp
     文件        1537  2018-09-20 15:41  IOUtil.h
     文件         117  2018-09-20 14:25  main.cpp
     文件         405  2018-09-20 22:18  SegY.pro
     文件       14390  2018-09-21 20:12  SegY.pro.user
     文件        2853  2018-09-21 12:49  SegYBytesPositions.h
     文件       18060  2018-09-21 20:03  SegYCommon.h
     文件        6516  2018-09-20 19:55  SegYIOUtils.cpp
     文件        1923  2018-09-20 19:54  SegYIOUtils.h
     文件        3943  2018-09-21 13:10  SegYReader.cpp
     文件        1429  2018-09-21 13:10  SegYReader.h
     文件        6122  2018-09-21 13:10  SegYTraceReader.cpp
     文件        1393  2018-09-21 13:10  SegYTraceReader.h
     文件        3113  2018-09-21 19:47  SegYTraceWriter.cpp
     文件        1342  2018-09-21 19:29  SegYTraceWriter.h
     文件        4237  2018-09-21 20:11  SegYWriter.cpp
     文件        1650  2018-09-21 19:49  SegYWriter.h
     文件         599  2016-11-17 23:45  Trace.cpp
     文件         865  2016-11-17 23:45  Trace.h

评论

共有 条评论