Python : Convert IEEE to IBM Floating Point

When creating code to read a SEG-Y file, I get the IEEE and IBM Floating Point format data. IBM floating point numbers are represented by one bit for the sign (S), 7 bits for the exponent, and 24 bits for the fraction. The exponent is to the base 16 (not 2), and has a bias of 64. Because of the base 16, the fraction may have up to three leading zeros. In this manner, some of the exponential value may be assumed by the fraction, increasing its range, at the cost of some precision. Normalization to the leading bit is not possible. Floating point numbers have no complement (neither one’s nor two’s complement). They are in sign-magnitude format (the sign being bit 31). You get the more information with the table below :

IBM 32-Bit Floating Point Format

S

Exponent

Fraction (Note: the most significant three bits
[23, 22, and 21] might all be zero).