[Python] Re: doppio backslash non va

Daniele Zambelli daniele.zambelli a inwind.it
Dom 4 Feb 2007 17:02:34 CET


Alle 10:47, domenica 4 febbraio 2007, SMZE ha scritto:
> Provo a spiegare meglio:
> Ho la necessità di dare significato a delle stringhe lette da file che
> rappresentano dei valori esadecimali. Per esempio il file è del tipo
>
>         ...
>         03ff55a600
>         556c9daa12
>         ...
>
> [...]

se ho capito bene, la prima parte del tuo problema è trasformare la stringa :
 "03ff55a600"

nella stringa:
"\x03\xff\x55\xa6\x00"

Poiché in Python le stringhe sono oggetti immutabili, conviene passare 
attraverso le liste:
1. trasformare la stringa in lista,
2. elaborare la lista,
3. ritrasformare la lista in stringa.

Ecco alcuni modi per risolvere il problema.

1. Orribile:

>>> n="03ff55a600"
>>> l=list(n)
>>> sep="\\x"
>>> for i in xrange(0, len(l)+3, 3):
	l.insert(i, sep)

	
>>> s="".join(l)
>>> print s
\x03\xff\x55\xa6\x00

2. Con un ciclo:

>>> n="03ff55a600"
>>> sep="\\x"
>>> ls=[]
>>> for i in xrange(0, len(n), 2):
	ls.append(n[i:i+2])

	
>>> s=sep+sep.join(ls)
>>> print s
\x03\xff\x55\xa6\x00

3. Con la costruzione di liste:

>>> n="03ff55a600"
>>> sep="\\x"
>>> ls=[n[i:i+2] for i in xrange(0, len(n), 2)]
>>> s=sep+sep.join(ls)
>>> print s
\x03\xff\x55\xa6\x00

4. Eliminando un po' di variabili intermedie:

>>> n="03ff55a600"
>>> sep="\\x"
>>> s=sep+sep.join([n[i:i+2] for i in xrange(0, len(n), 2)])
>>> print s
\x03\xff\x55\xa6\x00


> Grazie.

Prego

  Daniele



Maggiori informazioni sulla lista Python