2010-07-15 5 views
3

Je veux obtenir une liste d'ints représentant les octets d'une chaîne.Comment convertir des octets dans une chaîne en entiers? Python

+0

Python 2.x ou 3.x? – dan04

+0

Si vous ne voulez pas dire des valeurs ASCII (comme vous l'avez écrit dans un commentaire ci-dessous), que voulez-vous dire? –

+0

Pouvez-vous donner un exemple de ce à quoi ressemble la chaîne si les valeurs ASCII ne vous intéressent pas? –

Répondre

5

Voulez-vous dire les valeurs ASCII?

nums = [ord(c) for c in mystring] 

ou

nums = [] 
for chr in mystring: 
    nums.append(ord(chr)) 
+1

Pourquoi la downvote? –

+0

Je ne vois pas pourquoi c'est downvoted ... –

+0

Je me demandais la même chose ... merci pour les gars de + 1s. –

7

Une option pour Python 2.6 et versions ultérieures est d'utiliser un bytearray:

>>> b = bytearray('hello') 
>>> b[0] 
104 
>>> b[1] 
101 
>>> list(b) 
[104, 101, 108, 108, 111] 

Pour Python 3.x, vous aurez besoin d'un objet bytes plutôt qu'une chaîne dans tous les cas et pourrait donc le faire:

>>> b = b'hello' 
>>> list(b) 
[104, 101, 108, 108, 111] 
+0

Pour clarifier pour l'OP, ces valeurs * sont * les valeurs ASCII. –

2

Peut-être que vous voulez dire une chaîne d'octets, par exemple reçus sur le réseau, représentant un couple de valeurs entières?

Dans ce cas, vous pouvez "décompresser" la chaîne en valeurs entières en utilisant unpack() et en spécifiant "i" comme entier pour la chaîne de format.

Voir: http://docs.python.org/library/struct.html

+0

@Amarghosh: C'est un peu ce que je parie ici :). Non pas que l'entrée soit une chaîne de zéros et de uns, mais de vraies données binaires réelles qui représentent certains entiers. J'ai appris ceci quand j'ai essayé de résoudre Vortex0, que je suspecte que l'affiche de question essaye de résoudre .. (http://www.overthewire.org/wargames/vortex/level0.shtml) Excuses pour commenter ici, je semble être incapable de commenter sur la question réelle. (Je suis nouveau ici!) – Daan

+0

Devinez astucieux, +1. Maintenant, l'auteur a expliqué ce qu'il voulait vraiment, mais de toute façon ... –

+0

Vous avez besoin de 50 rep pour commenter les messages des autres - je vous ai juste fait 10 points de plus. – Amarghosh

Questions connexes