2012-02-19 44 views
5

Tôi đang cố gắng hiểu cách Python hiển thị chuỗi biểu diễn dữ liệu nhị phân.Biểu diễn chuỗi Python của dữ liệu nhị phân

Dưới đây là một ví dụ sử dụng 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' 

Trong ví dụ đầu tiên của random_bytes, sau mỗi lần \ x hình như vẫn có giá trị ở dạng thập lục phân: fd a9 được 87.

Trong ví dụ thứ hai, tuy nhiên, tôi không hiểu tại sao '\r\x9eq\xce' được hiển thị.

Tại sao Python hiển thị cho tôi các byte ngẫu nhiên này trong biểu diễn cụ thể này? Tôi nên giải thích như thế nào '\r\x9eq\xce'?

Trả lời

10

Chỉ sử dụng ký hiệu \xHH cho các ký tự là (1) không thể in được; và (2) không có số escape sequence ngắn hơn.

Để kiểm tra các mã hex, bạn có thể sử dụng binascii mô-đun:

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

Như bạn có thể thấy:

  • \r cũng giống như \x0d (đó là ký tự ASCII vận chuyển trở lại, CR);
  • q tương tự như \x71 (sau là số thập phân ASCII code trước đây).
3

\ r là một trở về vận chuyển, q là các nhân vật q - bạn nên tham khảo giá trị ASCII của họ (0x0d và 0x71)

Bất cứ khi nào có thể python - nó sẽ hiển thị các ký tự ASCII tương ứng, bạn sẽ chỉ thấy \ x khi không thể (thường khi byte cao hơn 0x79)

Các vấn đề liên quan