Python十六进制比较

13 投票
3 回答
48445 浏览
提问于 2025-04-15 16:55

我遇到了一个问题,希望有人能帮我解决!

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

0x01000000 = apple  
0x00010000 = orange  
0x00000100 = banana   

这些数字可以组合成各种可能的结果。比如说,0x01010000 = 苹果 & 橙子

我该如何从我的字符串中判断出是什么水果呢?我做了一个字典,里面列出了所有的组合,然后和它进行比较,这样是可以的!但我在想有没有更好的方法来实现这个功能。

3 个回答

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))

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得更简单易懂。

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'
21

把你的字符串转换成整数,可以使用内置的 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'

撰写回答