Python十六进制比较

hef*_*ump 7 python hex

嘿伙计们,我遇到了一个问题,我希望有人能帮助我搞清楚!

我有一个十六进制数字=的字符串,'0x00000000'这意味着:

0x01000000 = apple  
0x00010000 = orange  
0x00000100 = banana   
Run Code Online (Sandbox Code Playgroud)

所有这些组合都是可能的.即0x01010000 = apple & orange

我如何从我的字符串中确定它是什么水果?我制作了一本包含所有组合的字典,然后与之比较,它有效!但我想知道一个更好的方法.

Adr*_*son 14

通过使用int()内置函数并指定基数,将字符串转换为整数:

>>> int('0x01010000',16)
16842752
Run Code Online (Sandbox Code Playgroud)

现在,您有一个表示bitset的标准整数.使用&,|以及任何其他按位运算符来测试各个位.

>>> value  = int('0x01010000',16)
>>> apple  = 0x01000000
>>> orange = 0x00010000
>>> banana = 0x00000100
>>> bool(value & apple) # tests if apple is part of the value
True
>>> value |= banana     # adds the banana flag to the value
>>> value &= ~orange    # removes the orange flag from the value
Run Code Online (Sandbox Code Playgroud)

现在,如果您需要转换回您的字符串:

>>> hex(value)
'0x1000100'
Run Code Online (Sandbox Code Playgroud)