2009-06-28 11 views

risposta

56

Questo genere di cose?

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

Essendo rigoroso, questa è la rappresentazione binaria di un numero, ma non necessariamente i bit sottostanti in memoria. – bgusach

24

In Python 2.6+:

print bin(123) 

risultati in:

0b1111011 

in Python 2.x

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

nota, esempio tratto da: " Mark Dufour "a http://mail.python.org/pipermail/python-list/2003-December/240914.html

+1

è possibile aggiungere ulteriori bin = lambda B:. '0b' + '' join (map (str, binary (b))), quindi imita 2.6 + completamente –

+0

cosa voglio che il file binario riempito con 0 corrisponda a un numero binario di lunghezza fissa. – VaidAbhishek

+1

'bin (-7)' restituisce '-0b111' ma la funzione restituisce' [] '. –

19

Da Python 2.6 - con l'string.format method:

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

in particolare, come si potrebbe utilizzare imbottitura, in modo che più stampe su numeri diversi ancora in fila:

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

e lasciare il riempimento con spazi iniziali anziché spazi:

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

Da Python 3.6 - con f-strings:

Gli stessi tre esempi, con f-stringhe, sarebbe:

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

Leggermente off-topic, ma potrebbe essere utile. Per una migliore stampa user-friendly userei la funzione di stampa personalizzata, definire i caratteri di rappresentazione e la spaziatura di gruppo per una migliore leggibilità. Ecco un esempio di funzione, ci vuole una lista/array e la larghezza del gruppo:

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) 

uscita:

---- ---- 
---- ---k 
---- --k- 
-kkk kkkk 
k--- ---- 
kkkk kkkk 
Problemi correlati