Java like function getLeastSignificantBits() & getMostSignificantBits in Python?

前端 未结 2 1231
小蘑菇
小蘑菇 2021-01-15 12:59

Can someone please help me out in forming an easy function to extract the leastSignificant & mostSignificant bits in Python?

Ex code in Java:

UUI         


        
2条回答
  •  臣服心动
    2021-01-15 13:30

    efe640fc5d2f0036 in decimal is 17286575672347525174. Subtract 0x10000000000000000 from it & negate: you get -1160168401362026442

    int("efe640fc5d2f0036",16)-0x10000000000000000 -> -1160168401362026442
    

    Note that it's only guesswork but seems to work with the sole test case you provided (fortunately it was negative). Call that reverse engineering.

    Take 2 last hex values (dash separated) and join them. I suppose the storage means that it becomes negative when first digit is above 7, so negate it with higher 2-power if that's the case:

    def getLeastSignificantBits(s):
        hv = "".join(s.split("-")[-2:])
        v = int(hv,16)
        if int(hv[0],16)>7:
            # negative
            v = v-0x10000000000000000
        return v
    
    print(getLeastSignificantBits('a316b044-0157-1000-efe6-40fc5d2f0036'))
    

    result:

    -1160168401362026442
    

    Providing a method which takes the whole string and returns lsb & msb couple

    def getLeastMostSignificantBits(s):
        sp=s.split("-")
        lsb_s = "".join(sp[-2:])
        lsb = int(lsb_s,16)
        if int(lsb_s[0],16)>7:
            # negative
            lsb = lsb-0x10000000000000000
    
        msb_s = "".join(sp[:3])
        msb = int(msb_s,16)
        if int(msb_s[0],16)>7:
            # negative
            msb = msb-0x10000000000000000
    
        return lsb,msb
    
    print(getLeastMostSignificantBits('a316b044-0157-1000-efe6-40fc5d2f0036'))
    

    result:

    (-1160168401362026442, -6694969989912915968)
    

提交回复
热议问题