Domanda

Supponiamo che io abbia dei dati memorizzati in byte. Ad esempio:

  

0110001100010101100101110101101

Come posso memorizzarlo come stampabile ? Il modo ovvio sarebbe convertire ogni 0 nel carattere '0' e ogni 1 nel carattere '1'. In effetti questo è quello che sto facendo attualmente. Mi piacerebbe sapere come potrei imballarli più strettamente, senza perdere informazioni.

Ho pensato di convertire bit in gruppi di otto in ASCII, ma alcune combinazioni di bit non lo sono accettato in quel formato. Altre idee?

È stato utile?

Soluzione

Che dire di una codifica che utilizza solo " sicuro " personaggi come base64?
http://en.wikipedia.org/wiki/Base64

MODIFICA: si presuppone che si desideri archiviare in modo sicuro i dati in file di testo e simili?

In Python 2.x, le stringhe dovrebbero andare bene (Python non usa stringhe con terminazione null, quindi non preoccuparti di ciò).

Altrimenti in 3.x controlla i byte e gli oggetti bytearray. http://docs.python.org/3.0/library/stdtypes. html # byte-metodi

Altri suggerimenti

Non sono sicuro di cosa stai parlando.

>>> sample = "".join( chr(c) for c in range(256) )
>>> len(sample)
256
>>> sample
'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\
x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./0123456789:;<=>?@ABC
DEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83
\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97
\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab
\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf
\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3
\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7
\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb
\xfc\xfd\xfe\xff'

La stringa sample contiene tutti i 256 byte distinti. Non esiste una combinazione di "bit" ... non accettata ".

Per renderlo stampabile , usa semplicemente repr (campione) - i caratteri non ASCII vengono salvati. Come vedi sopra.

Prova il modulo array standard o il modulo struct . Questi supportano la memorizzazione di byte in modo efficiente nello spazio, ma non supportano direttamente i bit.

Puoi anche provare http: //cobweb.ecn. purdue.edu/~kak/dist/BitVector-1.2.html o http: //ilan.schnell-web.net/prog/bitarray/

Per Python 2.x, la soluzione migliore è memorizzarli in una stringa. Una volta che hai quella stringa, puoi codificarla in valori ASCII sicuri usando il modulo base64 fornito con python.

import base64
encoded = base64.b64encode(bytestring)

Questo sarà molto più condensato rispetto alla memorizzazione di "1". e " 0 " ;.

Per ulteriori informazioni sul modulo base64, consultare la docs . p>

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top