2011-12-09 10 views
30

Come si converte una stringa in valori ASCII?Converti stringa in valore ASCII python

Ad esempio, "hi" sarebbe tornato 104105.

posso fare individualmente ord ('h') e ord ('i'), ma che sta per essere fastidioso quando ci sono un sacco di lettere.

risposta

55

È possibile utilizzare un elenco di comprensione:

>>> s = 'hi' 
>>> [ord(c) for c in s] 
[104, 105] 
5

Se si desidera che il risultato concatenato, come si mostra nella sua interrogazione, si potrebbe provare qualcosa di simile:

>>> reduce(lambda x, y: str(x)+str(y), map(ord,"hello world")) 
'10410110810811132119111114108100' 
12

Ecco una bella concisa modo per eseguire la concatenazione:

>>> s = "hello world" 
>>> ''.join(str(ord(c)) for c in s) 
'10410110810811132119111114108100' 

E una sorta di divertente alternativa:

>>> '%d'*len(s) % tuple(map(ord, s)) 
'10410110810811132119111114108100' 
+0

Cosa stavo pensando? Questo è molto più pitone del mio. Questo è quello che ottengo per aver cercato di rispondere a una domanda di pitone subito dopo aver letto una serie di domande su Haskell ... +1 – Nate

1

Non è affatto ovvio perché si voglia concatenare i "valori ascii" (decimali). Quel che è certo è che concatenarli senza zeri iniziali (o qualche altro padding o delimitatore) è inutile - nulla può essere recuperato in modo affidabile da un tale output.

>>> tests = ["hi", "Hi", "HI", '\x0A\x29\x00\x05'] 
>>> ["".join("%d" % ord(c) for c in s) for s in tests] 
['104105', '72105', '7273', '104105'] 

Si noti che le prime 3 uscite sono di lunghezza diversa. Si noti che il quarto risultato è uguale al primo.

>>> ["".join("%03d" % ord(c) for c in s) for s in tests] 
['104105', '072105', '072073', '010041000005'] 
>>> [" ".join("%d" % ord(c) for c in s) for s in tests] 
['104 105', '72 105', '72 73', '10 41 0 5'] 
>>> ["".join("%02x" % ord(c) for c in s) for s in tests] 
['6869', '4869', '4849', '0a290005'] 
>>> 

Nota nessun problema.

2
def stringToNumbers(ord(message)): 
    return stringToNumbers 
    stringToNumbers.append = (ord[0]) 
    stringToNumbers = ("morocco") 
1

la descrizione è piuttosto confusa; concatenare direttamente i valori decimali non sembra utile nella maggior parte dei contesti. il seguente codice riprodurrà ogni lettera con un carattere a 8 bit e THEN si concatenerà. questo è il modo in cui funziona la codifica ASCII standard

def ASCII(s): 
    x = 0 
    for i in xrange(len(s)): 
     x += ord(s[i])*2**(8 * (len(s) - i - 1)) 
    return x 
Problemi correlati