penso da print, un'alternativa per usare la stringa così come viene ottenuta dalla funzione è:
Codice: Seleziona tutto
>>> import codecs
>>> codecs.decode("48656c6c6f2c20576f726c642121", "hex")
'Hello, World!!'
>>> # oppure
>>> import binascii
>>> binascii.unhexlify('48656c6c6f2c20576f726c642121')
'Hello, World!!'
btw, nella tua funzione il modo in cui restituisci la stringa (oltre a ricordarmi un album dei pantera)
è decisamente antiidiomatico e non particolarmente efficiente.... hai una lista di stringhe, usa join.
Anche la parte precedente non mi piace molto, a sto punto meglio scrivere una cosa del genere:
Codice: Seleziona tutto
>>> message = "Hello, World!!"
>>> ''.join(hex(ord(c))[2:].zfill(2) for c in message)
'48656c6c6f2c20576f726c642121'
che è uguale
Codice: Seleziona tutto
>>> codecs.decode(''.join(hex(ord(c))[2:].zfill(2) for c in message), 'hex')
'Hello, World!!'
inoltre, aggiungere `\x` è abbastanza inutile, siccome quella è solo *una* rappresentazione di quella stringa, una cosa che puoi scrivere tu nel codice del programma, ma che viene comunque salvata come una stringa "normale"... cioè 'Hello, World!!' e non '\x48\x65\x6c\x6c\x6f\x2c\x20\x57\x6f\x72\x6c\x64\x21\x21'. Potresti fare una roba del genere:
Codice: Seleziona tutto
>>> ''.join('\\x'+hex(ord(c))[2:].zfill(2) for c in message)
'\\x48\\x65\\x6c\\x6c\\x6f\\x2c\\x20\\x57\\x6f\\x72\\x6c\\x64\\x21\\x21'
>>> print ''.join('\\x'+hex(ord(c))[2:].zfill(2) for c in message)
\x48\x65\x6c\x6c\x6f\x2c\x20\x57\x6f\x72\x6c\x64\x21\x21
ma proprio solo se ti serve *stamparla* in quel modo, a livello di utilizzo interno nel programma è inutile, e anzi ti complica solo le cose.