2016-09-18 10 views
1

これはこのサイトの私の最初の質問です。 マイクロチップ32ビット16進数をIEEE754 32ビット16進数に変換する必要があります。これら二つのフォーマット間 差:Python - IEEE754 32bitからマイクロチップ32bitへの変換

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))) 
関連する問題