2012-02-21 8 views
11

En mi código Java que tienen el siguiente fragmento:¿Exactamente el mismo comportamiento entre Java String.getBytes() y la cadena de Python -> bytes?

String secret = "secret"; 
byte[] thebytes = secret.getBytes(); 

me gustaría tener exactamente el mismo resultado en pitón. Cómo puedo hacer eso ?

secret = 'secret' 
thebytes = ??? ??? ??? 

Thanks.

EDIT:

Además, será interesante tener la solución para Python 2.x y 3.x

+0

¿Cuál es el resultado de 'secret.getBytes()'? – katrielalex

+0

¿Qué versión de Python? El manejo de cadenas se actualizó de forma espectacular en Python 3 para hacer que Unicode fuera más sensato. – katrielalex

+0

¿Te importa Unicode? – katrielalex

Respuesta

6

Esto no es tan simple como podría parecer al principio, porque Python históricamente ha combinado matrices de bytes y cadenas. La respuesta corta, en Python 3, es

secret = "secret" 
secret.encode() 

Pero usted debe leer sobre cómo ofertas de Python con Unicode, las series y bytes.

+0

Gracias, y para Python 2.x? –

+1

'str' en Python 2.x es una cadena de bytes. Si quiere que su valor de byte sea un entero, entonces 'map (ord, secret)', como dijo @Linus. – katrielalex

4

No estoy seguro acerca de exactamente la misma, ya que Python doesn' t tiene byte, pero esto podría hacer el truco:

bytes = [ord(c) for c in "secret"] # => [115, 101, 99, 114, 101, 116] 

O usando map, como se sugiere katrielalex, simplemente porque es bastante:

bytes = map(ord, "secret") # => [115, 101, 99, 114, 101, 116] 
+0

Eso hace el trabajo. ¡Gracias! –

7

en Python-2.7 hay bytearray():

>>> s = 'secret' 
>>> b = bytearray(s) 
>>> for i in b: 
... print i 
115 
101 
99 
114 
101 
116 

Si esto es lo que estás buscando.

Cuestiones relacionadas