Source code for obspy.io.segy.util

# -*- coding: utf-8 -*-
from __future__ import (absolute_import, division, print_function,
                        unicode_literals)
from future.builtins import *  # NOQA

from struct import unpack

from obspy.core.util.libnames import _load_cdll


# Import shared libsegy
clibsegy = _load_cdll("segy")


[docs]def unpack_header_value(endian, packed_value, length, special_format): """ Unpacks a single value. """ # Use special format if necessary. if special_format: fmt = ('%s%s' % (endian, special_format)).encode('ascii', 'strict') return unpack(fmt, packed_value)[0] # Unpack according to different lengths. elif length == 2: format = ('%sh' % endian).encode('ascii', 'strict') return unpack(format, packed_value)[0] # Update: Seems to be correct. Two's complement integers seem to be # the common way to store integer values. elif length == 4: format = ('%si' % endian).encode('ascii', 'strict') return unpack(format, packed_value)[0] # The unassigned field. Since it is unclear how this field is # encoded it will just be stored as a string. elif length == 8: return packed_value # Should not happen else: raise Exception