Cambio de cadena a tipo de byte en Python 2.7

En Python 3.2, puedo cambiar el tipo de un objeto fácilmente. Por ejemplo :

x=0 print(type (x)) x=bytes(0) print(type (x)) 

me va a dar esto:

   

Pero, en Python 2.7, parece que no puedo usar la misma manera de hacerlo. Si hago el mismo código, dame esto:

   

¿Qué puedo hacer para cambiar el tipo en un tipo de bytes?

¿Qué puedo hacer para cambiar el tipo en un tipo de bytes?

No se puede, no hay un tipo de ‘bytes’ en Python 2.7.

De la documentación de Python 2.7 (5.6 Tipos de secuencia): “Hay siete tipos de secuencia: cadenas, cadenas Unicode, listas, tuplas, matrices de byte, búferes y objetos de rango de rango”.

De la documentación de Python 3.2 (5.6 Tipos de secuencia): “Hay seis tipos de secuencia: cadenas, secuencias de bytes (objetos de bytes), matrices de bytes (objetos de bytearray), listas, tuplas y objetos de rango”.

No está cambiando los tipos, está asignando un valor diferente a una variable.

También estás golpeando en una de las diferencias fundamentales entre python 2.xy 3.x; simplificado en gran medida el tipo 2.x unicode ha reemplazado al tipo str , que a su vez ha sido renombrado a bytes . Resulta que funciona en su código, ya que las versiones más recientes de Python 2 han agregado bytes como un alias para que str facilite la escritura de código que funciona en ambas versiones.

En otras palabras, su código está funcionando como se esperaba.

En Python 2.x, los bytes son solo un alias para str , así que todo funciona como se espera. Además, aquí no está cambiando el tipo de ningún objeto, simplemente está volviendo a vincular el nombre x con un objeto diferente.

Puede que no sea exactamente lo que necesita, pero cuando necesitaba obtener el valor decimal del byte d8 (era un byte que daba una compensación en un archivo) hice:

 a = (data[-1:]) # the variable 'data' holds 60 bytes from a PE file, I needed the last byte #so now a == '\xd8' , a string b = str(a.encode('hex')) # which makes b == 'd8' , again a string c = '0x' + b # c == '0xd8' , again a string int_value = int(c,16) # giving me my desired offset in decimal: 216 #I hope this can help someone stuck in my situation