2012-02-19 24 views
5

Estoy tratando de entender la forma en que Python muestra cadenas que representan datos binarios.Representación de cadena de Python de datos binarios

Aquí hay un ejemplo usando os.urandom

In [1]: random_bytes = os.urandom(4) 

In [2]: random_bytes 
Out[2]: '\xfd\xa9\xbe\x87' 

In [3]: random_bytes = os.urandom(4) 

In [4]: random_bytes 
Out[4]: '\r\x9eq\xce' 

En el primer ejemplo de random_bytes, después de cada \ x parece que hay valores en formato hexadecimal: fd a9 ser 87.

En el segundo ejemplo, sin embargo, no entiendo por qué se muestra '\r\x9eq\xce'.

¿Por qué Python me muestra estos bytes aleatorios en esta representación particular? ¿Cómo debo interpretar '\r\x9eq\xce'?

Respuesta

10

Está utilizando solamente la notación \xHH para los caracteres que son (1) no imprimibles; y (2) no tiene un escape sequence más corto.

Para examinar los códigos hexadecimales, se puede utilizar el módulo binascii:

In [12]: binascii.hexlify('\r\x9eq\xce') 
Out[12]: '0d9e71ce' 

Como se puede ver:

  • \r es lo mismo que \x0d (que es el carácter ASCII de retorno de carro, CR);
  • q es lo mismo que \x71 (este último es el hex ASCII code del anterior).
3

\ r es un retorno de carro, q es el personaje q - usted debe referirse a sus valores ASCII (0x0D y 0x71)

Siempre que puede pitón - se mostrará el carácter ASCII correspondiente, solo verá \ x cuando no puede (generalmente cuando el byte es más alto que 0x79)

Cuestiones relacionadas