web-dev-qa-db-fra.com

Convertit la chaîne en ASCII valeur python

Comment convertiriez-vous une chaîne en valeurs ASCII)?

Par exemple, "hi" renverrait 104105.

Je peux faire individuellement ord ('h') et ord ('i'), mais ça va être gênant quand il y a beaucoup de lettres.

51
Neal Wang

Vous pouvez utiliser une compréhension de liste:

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

Voici une manière assez concise d'effectuer la concaténation:

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

Et une sorte d'alternative amusante:

>>> '%d'*len(s) % Tuple(map(ord, s))
'10410110810811132119111114108100'
20
Andrew Clark

Si vous voulez que votre résultat soit concaténé, comme vous l'avez montré dans votre question, vous pouvez essayer quelque chose comme:

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

Si vous utilisez python 3 ou plus,

>>> list(bytes(b'test'))
[116, 101, 115, 116]
3
devunt
def stringToNumbers(ord(message)):
    return stringToNumbers
    stringToNumbers.append = (ord[0])
    stringToNumbers = ("morocco")
2
islam

votre description est plutôt déroutante; concaténer directement les valeurs décimales ne semble pas utile dans la plupart des contextes. le code suivant convertira chaque lettre en un caractère de 8 bits et ENSUITE concaténer. Voici comment fonctionne l'encodage standard ASCII

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

Il n’est pas du tout évident de vouloir concaténer les "valeurs ascii" (décimales). Ce qui est certain, c’est qu’il est inutile de les concaténer sans zéros non significatifs (ni autre remplissage ni délimiteur), rien n’est récupérable de manière fiable à partir d’une telle sortie.

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

Notez que les 3 premières sorties sont de longueur différente. Notez que le quatrième résultat est le même que le premier.

>>> ["".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']
>>>

Notez pas de tels problèmes.

1
John Machin