从Python的十六进制到一个补码

时间:2012-11-21 12:02:53

标签: python bit-manipulation ones-complement

有没有一种简单的方法可以在python中生成一个补码?

例如,如果您采用十六进制值0x9E,我需要将其转换为0x61

我需要将二进制1换成0,将0换成1。感觉这应该很简单。

2 个答案:

答案 0 :(得分:25)

只需使用the XOR operator ^对抗0xFF:

>>> hex(0x9E ^ 0xFF)
'0x61'

如果您需要处理大于一个字节的值,您可以根据值int.bit_length() method创建掩码:

>>> value = 0x9E
>>> mask = (1 << value.bit_length()) - 1
>>> hex(value ^ mask)
'0x61'
>>> value = 0x9E9E
>>> mask = (1 << value.bit_length()) - 1
>>> hex(value ^ mask)
'0x6161'

答案 1 :(得分:1)

哈。刚刚发现python bin()返回一个字符串!

所以我们可以在这里玩得开心!

for x in numbers: # numbers is a list of int
    b = bin(x)
    #print b # e.g. String 0b1011100101
    b = b.replace('0', 'x')
    b = b.replace('1', '0')
    b = b.replace('x', '1')
    b = b.replace('1b', '0b')
    #print b # String 0b0100011010
    print int(b, 2) # the decimal representation