[Python] funzione unpack

Daniele Varrazzo piro a develer.com
Mer 13 Gen 2010 12:17:02 CET


On Tue, 12 Jan 2010 20:43:29 +0100, Ernesto <e.picardi a unical.it> wrote:
> Ciao a tutti,
> 
> mi chiedevo se in python ci fosse una funzione simile alla seguente:
> 
> $bits = unpack("B32",$value);
> 
> che permette di ottenere una bit string.

Credo di no nella libreria standard, ma puoi usare qualcosa tipo questa:

  def int2bin(n, _hex2bin={
          "0":"0000", "1":"0001", "2":"0010", "3":"0011", 
          "4":"0100", "5":"0101", "6":"0110", "7":"0111", 
          "8":"1000", "9":"1001", "A":"1010", "B":"1011", 
          "C":"1100", "D":"1101", "E":"1110", "F":"1111"}
          ):
      return "".join(_hex2bin[i] for i in '%X' % n).lstrip('0') or '0'

  In [5]: int2bin(1024)
  Out[5]: '10000000000'

Non funziona coi negativi, ma se servissero è facile correggerla.

> Ho provato con il modulo struct anche se non sembra ci sia qualcosa di  
> equivalente. Esiste la funzione struct.unpack() ma non restituisce la  
> stessa cosa.

Le funzioni in struct possono comunque farti comodo, per esempio per
convertire da un blocco di dati a interi (usando la giusta endianness) e da
questi in binario con questa funzione.

> Come posso, inoltre, verificare se il sistema su cui sto lavorando è  
> little-endian o big-endian?

http://docs.python.org/library/sys.html#sys.byteorder

-- 
Daniele Varrazzo - Develer S.r.l. 
http://www.develer.com


Maggiori informazioni sulla lista Python