2011-12-09 12 views
30

¿Cómo convertiría una cadena a valores ASCII?Convierta cadena en valor ASCII python

Por ejemplo, "Hola" volvería 104105.

que pueda hacer de forma individual ord ('h') y ord ('i'), pero va a ser un problema cuando hay un montón de cartas.

Respuesta

55

Se puede utilizar una lista por comprensión:

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

Si desea que su resultado concatenado, como se muestra en su pregunta, usted podría intentar algo como:

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

Aquí es una muy concisa manera de realizar la concatenación:

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

y una especie de alternativa divertida:

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

¿Qué estaba pensando? Esto es mucho más pitónico que el mío. Eso es lo que recibo por intentar responder a una pregunta de Python justo después de leer un montón de preguntas de Haskell ... +1 – Nate

1

No es en absoluto evidente por qué uno querría para concatenar los (decimales) "valores ASCII". Lo cierto es que concatenarlos sin ceros a la izquierda (u otro relleno o delimitador) es inútil, nada puede recuperarse de manera confiable de tal salida.

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

Tenga en cuenta que las primeras 3 salidas son de diferente longitud. Tenga en cuenta que el cuarto resultado es el mismo que el primero.

>>> ["".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 no hay tales problemas.

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

descripción es bastante confuso; concatenar directamente los valores decimales no parece ser útil en la mayoría de los contextos. el siguiente código convertirá cada letra a un carácter de 8 bits, y ENTONCES concatenará. así es como funciona la codificación ASCII estándar

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