2012-02-19 14 views
5

के पाइथन स्ट्रिंग का प्रतिनिधित्व मैं पाइथन डेटा को बाइनरी डेटा का प्रतिनिधित्व करने वाले स्ट्रिंग को प्रदर्शित करने के तरीके को समझने की कोशिश कर रहा हूं।बाइनरी डेटा

यहाँ 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 a9 हो 87.

दूसरे उदाहरण में, हालांकि, मुझे समझ में नहीं आता क्यों '\r\x9eq\xce' प्रदर्शित होता है।

पाइथन मुझे इस विशेष प्रतिनिधित्व में इन यादृच्छिक बाइट्स क्यों दिखाता है? मुझे '\r\x9eq\xce' की व्याख्या कैसे करनी चाहिए?

उत्तर

10

यह केवल वर्णों के लिए \xHH नोटेशन का उपयोग कर रहा है (1) गैर-प्रिंट करने योग्य; और (2) कम escape sequence नहीं है।

हेक्स कोड की जांच करने के लिए, आप binascii मॉड्यूल इस्तेमाल कर सकते हैं:

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

आप देख सकते हैं:

  • \r रूप में ही है \x0d (यह ASCII कैरिज रिटर्न चरित्र, सीआर है);
  • q\x71 जैसा ही है (बाद वाला हेक्स ASCII code पूर्व में है)।
3

\ r एक गाड़ी वापसी है, क्ष क्ष चरित्र है - आप अपने ASCII मूल्यों का संदर्भ लेना चाहिए (0x0d और 0x71)

जब भी अजगर सकते हैं - यह इसी ASCII वर्ण प्रदर्शित करेगा, आप केवल तब देखेंगे \ x जब यह नहीं हो सकता है (आमतौर पर जब बाइट 0x79 से अधिक होता है)

संबंधित मुद्दे