2012-02-19 3 views
5

Я пытаюсь понять, как Python отображает строки, представляющие двоичные данные.Строковое представление Python двоичных данных

Ниже приведен пример с использованием 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' 

В первом примере random_bytes, после каждого \ х существует, как представляется, значение в шестнадцатеричной форме: FD а9 будет 87.

Во втором примере, однако я не понимаю, почему отображается '\r\x9eq\xce'.

Почему Python показывает мне эти случайные байты в этом конкретном представлении? Как следует интерпретировать '\r\x9eq\xce'?

ответ

10

Используется только для обозначения \xHH для символов, которые (1) не подлежат печати; и (2) не имеют более коротких escape sequence.

Чтобы исследовать шестнадцатеричные коды, вы можете использовать binascii модуль:

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

Как вы можете видеть:

  • \r такая же, как \x0d (это символ ASCII возврат каретки, CR);
  • q - это то же самое, что и \x71 (последний - шестнадцатеричный ASCII code).
3

\ г является возврат каретки, д является д характер - вы должны обратиться к их значениям ASCII (0x0D и 0x71)

Всякий раз, когда питон может - он будет отображаться соответствующий ASCII-символ, вы будете видеть только \ x, когда он не может (обычно, когда байт выше 0x79)

Смежные вопросы