Python 主机S370十六进制浮点转换&x2013;指向小数点

Python 主机S370十六进制浮点转换&x2013;指向小数点,python,Python,我正在从大型机读取一个二进制文件,我想将当前以十六进制表示的单进动浮点数转换为其在python中的十进制等效值。比如说 X'42808000'==>应转换为十进制的128.50。。 X'C2808000'==>应转换为十进制的-128.50 它们是python中的内置函数吗。看起来内部浮点表示不是IEEE格式,而是旧的“S370大型机十六进制格式”。请让我知道你对如何转换相同的想法。感谢从您的问题中不清楚数字当前在何处以十六进制表示,对于S370十六进制浮点数的格式,您知道它们是二进制整数还是字

我正在从大型机读取一个二进制文件,我想将当前以十六进制表示的单进动浮点数转换为其在python中的十进制等效值。比如说

X'42808000'==>应转换为十进制的128.50。。 X'C2808000'==>应转换为十进制的-128.50


它们是python中的内置函数吗。看起来内部浮点表示不是IEEE格式,而是旧的“S370大型机十六进制格式”。请让我知道你对如何转换相同的想法。感谢

从您的问题中不清楚数字当前在何处以十六进制表示,对于S370十六进制浮点数的格式,您知道它们是二进制整数还是字符串值,因此我编写了一个函数,可以接受其中任何一个

try:
    basestring
except NameError:  # Python 3
    basestring = str

def hextofp(hexadecimal):
    """ Convert S370 hexadecimal floating-point number to Python
        binary floating point value (IEEE 754).
    """
    v = int(hexadecimal, 16) if isinstance(hexadecimal, basestring) else hexadecimal
    if v:  # not special case of "True 0"
        sign = -1 if v & 0x80000000 else 1
        exponent = ((v & 0x7f000000) >> 24) - 64  # remove bias
        fraction = float(v & 0x00ffffff) / 16777216  # divide by 2**24
        return sign * (fraction * 16**exponent)
    return 0.0

print('{:.2f}'.format(hextofp('42808000')))  # -> 128.50
print('{:.2f}'.format(hextofp(0x42808000)))  # -> 128.50
print('{:.2f}'.format(hextofp('C2808000')))  # -> -128.50
print('{:.3f}'.format(hextofp('40600000')))  # -> 0.375

# True 0
print('{:.1f}'.format(hextofp('00000000')))  # -> 0.0
# largest representable number
print('{:.8g}'.format(hextofp('7fffffff')))  # -> 7.2370051e+75
# smallest positive (normalized) number
print('{:.8g}'.format(hextofp('00100000')))  # -> 5.3976053e-79

# misc examples
print('{:.2f}'.format(hextofp('42500000')))  # -> 80.00
print('{:.2f}'.format(hextofp('41100000')))  # -> 1.00
print('{:.3f}'.format(hextofp('C276A000')))  # -> -118.625
print('{:.2f}'.format(hextofp('427b3333')))  # -> 123.20
print('{:.2f}'.format(hextofp('427b7333')))  # -> 123.45

您需要找到或计算出“olds370”二进制格式(我怀疑它是十六进制字符),然后您可以确定将其转换为Python浮点所需的操作。我确信它在某个地方有文档记录。我有一个文档显示了转换是如何完成的…但我不确定如何将其放入一段代码中。任何帮助都将不胜感激。谢谢(例1和例2)好的,但我要等到今天早上晚些时候才能看清楚(现在快凌晨2点了)。我在链接文档中注意到一件我不明白的事情。它说:“回想一下,以7位无符号格式存储的整数的范围是0.N.127,我们有0.E+64.127,或者-64.E.63。”这些字符是什么意思,是的,这是正确的(感谢您的时间,非常棒…它工作得非常好…非常感谢您的帮助…我将检查您的代码,看看它是如何完成的。。。