我有一个十六进制数= '0x00000000'
的字符串,表示:
0x01000000 = apple
0x00010000 = orange
0x00000100 = banana
所有这些组合都是可能的。即,0x01010000 = apple & orange
我如何从我的字符串中确定它是什么水果?我制作了一本包含所有组合的字典,然后与之比较,它有效!但我想知道一种更好的方法。
答案 0 :(得分:13)
使用int()
内置函数并指定基数,将字符串转换为整数:
>>> int('0x01010000',16)
16842752
现在,您有一个表示位集的标准整数。使用&
,|
和任何其他按位运算符来测试各个位。
>>> 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
现在,如果您需要转换回字符串:
>>> hex(value)
'0x1000100'
答案 1 :(得分:2)
您首先可以将字符串转换为整数:
s = "0x01010000"
i = int(s, 16) #i = 269484032
然后,您可以设置水果列表:
fruits = [(0x01000000, "apple"), (0x00010000, "orange"), (0x00000100, "banana")]
确定你拥有的水果就足够了:
s = "0x01010000"
i = int(s, 16)
for fid,fname in fruits:
if i&fid>0:
print "The fruit '%s' is contained in '%s'" % (fname, s)
这里的输出是:
The fruit 'apple' is contained in '0x01010000'
The fruit 'orange' is contained in '0x01010000'
答案 2 :(得分:0)
def WhichFruit(n):
if n & int('0x01000000',16):
print 'apple'
if n & int('0x00010000',16):
print 'orange'
if n & int('0x00000100',16):
print 'banana'
WhichFruit(int('0x01010000',16))