2016-09-18 78 views
1

这是我在这个网站上的第一个问题。 我需要将Microchip 32位十六进制数转换为IEEE754 32位十六进制数。这两个格式之间 区别:Python - IEEE754 32bit到Microchip 32位转换器

Microchip = exponent + sign + fraction 

IEEE 754 = sign + exponent + fraction 

向该格式顶部9位的循环移位旋转应做之间进行转换。
问题是如何在Python(2.7)中做到这一点?

实施例:

0x833C0000 -> 0b10000011 00111100 00000000 00000000 Microchip 32bit, 

0x41BC0000 -> 0b01000001 10111100 00000000 00000000 IEEE754 32bit 

回答

0

的解决方案是简单的并且在下面的印刷:

def formatHex(val): 
    return format(val, '#04x') 

def microchip32_2_ieee754(m32): 
    sign = (1 << 31) if m32 & (1 << 23) else 0 
    expoent = (m32 & 0xFF000000) >> 1 
    return expoent + sign + (m32 & 0x007FFFFF) 

def ieee754_2_microchip32(ieee): 
    sign = (1 << 23) if ieee & (1 << 31) else 0 
    expoent = (ieee & 0x7F800000) << 1 
    return expoent + sign + (ieee & 0x007FFFFF) 

if __name__ == "__main__": 

    m32 = 0x833C0000; 

    print "Microchip 32: ", formatHex(m32) 
    print "IEEE 754: ", formatHex(microchip32_2_ieee754(m32)) 
    print "Microchip 32: ", formatHex(
           ieee754_2_microchip32(
           microchip32_2_ieee754(m32)))