2012-07-24 27 views
35

Supongamos que tengo una cadena de 4 caracteres, y quiero convertir esta cadena en una matriz de bytes donde cada carácter de la cadena se traduce a su equivalente hexadecimal. p.ej.Python: convertir cadena a matriz de bytes

str = "ABCD" 

que estoy tratando de que mi salida sea

array('B', [41, 42, 43, 44]) 

¿Hay una manera sencilla de lograr esto?

+3

Lo que queremos no es posible, al menos no en esta forma exacta. Una bytearray de tipo 'B' contiene enteros de 1 byte, y siempre se representan en decimal. –

Respuesta

34

codificar función puede ayudar aquí, codificar devuelve una versión codificada de la cadena

In [44]: str = "ABCD" 

In [45]: [elem.encode("hex") for elem in str] 
Out[45]: ['41', '42', '43', '44'] 

o puede utilizar módulo de gama

In [49]: import array 

In [50]: print array.array('B', "ABCD") 
array('B', [65, 66, 67, 68]) 
+0

sin embargo, como puede ver, el módulo de matriz da un valor ascii de los elementos de cadena, que no coincide con su salida esperada – avasal

+0

Gracias. ¡Estas ideas me dan suficiente para trabajar! – Alex

+0

¿Por qué no usar 'map'? – pradyunsg

2
s = "ABCD" 
from array import array 
a = array("B", s) 

Si desea hexagonal:

print map(hex, a) 
22

Solo use un bytearray() que es una lista de bytes.

python2:

s = "ABCD" 
b = bytearray() 
b.extend(s) 

python3:

s = "ABCD" 
b = bytearray() 
b.extend(map(ord, s)) 

Por cierto, no utilizan str como nombre de variable ya que es incorporado.

+0

Esto está roto en 3.4: 'TypeError: se requiere un número entero' –

+0

@KevanAhlquist my bad. Solucionado ahora – Pithikos

+0

Para Python 3 esto me parece más limpio: 's =" ABCD "', 'b = bytearray()', 'b.extend (s.encode())' –

3

Una alternativa para obtener una matriz de bytes es codificar la cadena en ascii: b=s.encode('ascii').

4

Esto funciona para mí (Python 2)

s = "ABCD" 
b = bytearray(s) 

# if your print whole b, it still displays it as if its original string 
print b 

# but print first item from the array to see byte value 
print b[0] 

Referencia: http://www.dotnetperls.com/bytes-python

Cuestiones relacionadas