在Python 2.6或更高版本,使用format
syntax:
'{0:0=#10b}'.format(my_num)[2:]
# '00001010'
一個關於Python字符串整齊的事情是,他們是序列。如果您只需遍歷字符,則不需要將字符串轉換爲列表。
編輯:對於隱寫術,您可能有興趣將字符流轉換爲位流。這裏是你如何能做到這一點與發電機:
def str2bits(astr):
for char in astr:
n=ord(char)
for bit in '{0:0=#10b}'.format(n)[2:]:
yield int(bit)
並以比特流轉換回字符流:
def grouper(n, iterable, fillvalue=None):
# Source: http://docs.python.org/library/itertools.html#recipes
"grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
return itertools.izip_longest(*[iter(iterable)]*n,fillvalue=fillvalue)
def bits2str(bits):
for b in grouper(8,bits):
yield chr(int(''.join(map(str,b)),2))
例如,你可以這樣使用上述功能:
for b in str2bits('Hi Zvarberg'):
print b,
# 0 1 0 0 1 0 0 0 0 1 1 0 1 0 0 1 0 0 1 0 0 0 0 0 0 1 0 1 1 0 1 0 0 1 1 1 0 1 1 0 0 1 1 0 0 0 0 1 0 1 1 1 0 0 1 0 0 1 1 0 0 0 1 0 0 1 1 0 0 1 0 1 0 1 1 1 0 0 1 0 0 1 1 0 0 1 1 1
# To show bits2str is the inverse of str2bits:
print ''.join([c for c in bits2str(str2bits('Hi Zvarberg'))])
# Hi Zvarberg
也,所以大師Ned Batchelder不使用Python和PIL here一些隱祕相關的實驗。您可能能夠在那裏找到一些有用的代碼。
如果你發現你需要更多的速度(並且仍然希望用Python編碼),你可能需要使用numpy。
這就像第四屆「我怎麼轉換成二進制」本週(主要是在不同的語言),我們已經有問題,什麼是**向上**?這是功課嗎? (這不是批評,我只是感到驚訝;將數字轉換爲二進制表示在一般編程中沒有那麼多......) –
我會說不,但有人可能會糾正我。我不確定一個>>循環是否會比bin()更快,但你不需要rjust() –
這不是家庭作業。我正在研究一個隱寫術應用程序。這可能不是最好的方式,但它是明顯的方式。 –