Python 主机S370十六进制浮点转换&x2013;指向小数点
我正在从大型机读取一个二进制文件,我想将当前以十六进制表示的单进动浮点数转换为其在python中的十进制等效值。比如说 X'42808000'==>应转换为十进制的128.50。。 X'C2808000'==>应转换为十进制的-128.50Python 主机S370十六进制浮点转换&x2013;指向小数点,python,Python,我正在从大型机读取一个二进制文件,我想将当前以十六进制表示的单进动浮点数转换为其在python中的十进制等效值。比如说 X'42808000'==>应转换为十进制的128.50。。 X'C2808000'==>应转换为十进制的-128.50 它们是python中的内置函数吗。看起来内部浮点表示不是IEEE格式,而是旧的“S370大型机十六进制格式”。请让我知道你对如何转换相同的想法。感谢从您的问题中不清楚数字当前在何处以十六进制表示,对于S370十六进制浮点数的格式,您知道它们是二进制整数还是字
它们是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。”这些字符是什么意思,是的,这是正确的(感谢您的时间,非常棒…它工作得非常好…非常感谢您的帮助…我将检查您的代码,看看它是如何完成的。。。