У меня есть программа, которая читает в двоичном файле числа с плавающей запятой IBM с одинарной точностью.Цель состоит в том, чтобы преобразовать их в плавающие точки IEEE754 (в двоичном формате).В настоящее время я читаю двоичное число IBM, преобразовываю его в число с плавающей точкой, а затем преобразовываю его в формат IEEE754 (с одинарной точностью).По какой-то причине я не получаю желаемый вывод.
Мой ввод:
11000010011101101010000000000000
Вывод, который я хочу:
11000010111011010100000000000000
Вывод, который я получаю:
1100000001011101101010000000000000000000000000000000000000000000
Код:
import struct
getBin = lambda x: x > 0 and str(bin(x))[2:] or "-" + str(bin(x))[3:]
def floatToBinary64(value):
val = struct.unpack('Q', struct.pack('d', value))[0]
return getBin(val)
with open("test.bin", "rb") as f:
while True:
ibm = f.read(32);
if not ibm:
break
print(ibm)
ibm = int(ibm, 2)
sign = (ibm >> 31) & 0x01
exponent = (ibm >> 24) & 0x7f
mantissa = (ibm & 0x00ffffff) / pow(2, 24)
decimal = (1 - 2 * sign) * mantissa * float(pow(16, exponent - 64))
print(decimal)
binary = floatToBinary64(decimal)
print(binary)
Как я могу изменить этот код для получения желаемого результата?