2012-10-30 25 views
0

我想將位掩碼應用於python中的變量以確定哪些位已設置。我一直在嘗試,但還沒有找到正確的方法來做到這一點。我的變量是二進制的,並顯示其價值,我用個功能hexlify():在python中應用位掩碼

corr = fh.read(1) 
    mac = fh.read(6)[-3:] 
    print "corr "+ hexlify(corr) 

人無我有麻煩位掩碼應用到科爾:

print hexlify(corr&0x01) 

它說

TypeError: unsupported operand type(s) for &: 'str' and 'int' 

但爲什麼呢?任何幫助,將不勝感激! 非常感謝!

+0

顯然你不能在'str'和'int'上使用二進制OR。你必須在之前將corr轉換爲'int',但是你還沒有顯示任何相關的信息......什麼是corr?什麼是hexlify? – Gandaro

+1

hexifly只是將它轉換爲我認爲的字符串(如''%x「%my_int') –

+0

可能值得看看https://code.google.com/p/python-bitstring/或http:// pypi。 python.org/pypi/BitVector/3.1.1這可能會使生活更容易 –

回答

0

現在,我不喜歡這一點,但它似乎工作:

print (int(hexlify(corr),16))&0x01 

這個轉換科爾爲十六進制字符串,再次得到轉換baclk到一個整數,基地16之前應用掩碼.....任何提示我如何能解決這個問題,否則將不勝感激。 謝謝!

+1

這是非常複雜的:你把你的字節,hexlify,把它變回數值,然後應用'&'... – glglgl

1

因爲科爾是一個字符串,它需要int

print hexlify(int(corr)&0x01) # if corr is like "12352" 
print hexlify(ord(corr)&0x01) #if corr is like "\x##" 

>>> ord("\x10") 
16 
>>> ord("\x10")&0x01 
0 
+0

但我需要hexlify它首先顯示它會表明它是一個二進制數,不是嗎? :o – cerr

+0

當我int()它,我得到這個:打印hexlify(int(corr)&0x01) ValueError:無效文字爲int()與基地10:'\ x01' – cerr

+0

哦嘗試使用'ord(corr) (...) –

0

由於corr來自

corr = fh.read(1) 

我想你想讀一個字節,然後用這個字節的值繼續進行。

那麼你應該ord()chr()工作:

if corr: # it could as well be empty! 
    print "corr "+ hexlify(chr(ord(corr) & 0x01)) 

ord()讓你這個字節,你可以處理,然後的字節值,如hexlify()似乎期待一個字符串,再隱蔽它一個單字節的字符串。