2009-06-28 47 views

回答

56

這種事情?

>>> ord('a') 
97 
>>> hex(ord('a')) 
'0x61' 
>>> bin(ord('a')) 
'0b1100001' 
24

在Python 2.6+

print bin(123) 

結果:

0b1111011 

在蟒2.x的

>>> binary = lambda n: n>0 and [n&1]+binary(n>>1) or [] 
>>> binary(123) 
[1, 1, 0, 1, 1, 1, 1] 

注意,例如取自:「馬克杜福爾「在http://mail.python.org/pipermail/python-list/2003-December/240914.html

+1

可以進一步添加倉=拉姆達B:「0B」 +「」加入( map(str,binary(b))),所以它完全模仿2.6+ – 2009-06-28 04:04:31

+0

我想用0填充二進制數來容納一個固定長度的二進制數。 – VaidAbhishek 2012-05-28 19:29:37

19

通過Python 2.6 - 與string.format method

"{0:b}".format(0x1234) 
特別

,你可能會想用填充,所以不同的數字,用於打印多份仍在排隊:

"{0:16b}".format(0x1234) 

並且使用前導0而不是空格填充填充:

"{0:016b}".format(0x1234) 

通過Python 3.6 - 與f-strings

同樣的三個例子,與F-字符串,將是:

f"{0x1234:b}" 
f"{0x1234:16b}" 
f"{0x1234:016b}" 
1

稍微偏離主題,但可能會有所幫助。爲了更好的用戶友好打印,我會使用自定義打印功能,定義表示字符和組間距以提高可讀性。下面是一個例子的功能,它需要一個列表/陣列和組寬度:

def bprint(A, grp): 
    for x in A: 
     brp = "{:08b}".format(x) 
     L=[] 
     for i,b in enumerate(brp): 
      if b=="1": 
       L.append("k") 
      else: 
       L.append("-") 
      if (i+1)%grp ==0 : 
       L.append(" ") 

     print "".join(L) 

#run 
A = [0,1,2,127,128,255] 
bprint (A,4) 

輸出:

---- ---- 
---- ---k 
---- --k- 
-kkk kkkk 
k--- ---- 
kkkk kkkk