Int.to_bytes का असंगत व्यवहार ()

Nov 29 2020

जब मैं लिखता हूं:

expint = 34614  
expint = expint.to_bytes(2,'big')

मुझे b '\ x87 \ x36' के बजाय expint = b '\ x876' का मान मिलता है (3 गायब है और प्रारूप गलत लगता है)। हालाँकि जब मैंने एक्सपिंट = 65418 के साथ भी यही कोशिश की तो मुझे सही परिणाम मिला, b '\ xff \ x8a'। क्या मैं दुभाषिया या अन्य उपकरणों में बग का उपयोग कर सकता हूं? मैं Visual Studio 2017 में Python 3.7 का उपयोग कर रहा हूं।

जवाब

2 KarlKnechtel Nov 29 2020 at 20:32

इससे कुछ लेना-देना नहीं है int.to_bytes(), और bytesटाइप के साथ ही सब कुछ करना है।

मुझे b '\ x87 \ x36' के बजाय expint = b '\ x876' का मान मिलता है

इस शिकायत का कोई मतलब नहीं है, क्योंकि b'\x876'और b'\x87\x36' एक ही चीज हैं :

>>> b'\x87\x36'
b'\x876'
>>> b'\x87\x36' == b'\x876'
True

एक bytesवस्तु का प्रतिनिधित्व है नहीं बस एक हेक्स डंप। बाइट-स्ट्रिंग्स का व्याकरण कई अन्य विकल्पों की अनुमति देता है, ऐतिहासिक कारणों से (यानी: क्योंकि 2.x में हम दिखावा करते थे कि वे पाठ का प्रतिनिधित्व कर सकते हैं)। विहित निरूपण (अर्थात जब आप printउदाहरण के लिए पाइथन द्वारा निर्मित ) केवल \xशैली का उपयोग करते हैं एक अंतिम उपाय के रूप में बच निकलता है।

ASCII में, 0x36प्रतीक के साथ बाइट को मैप किया जाता है 6। (फिर से, हम दिखावा करते थे कि हम इस तरह से पाठ का प्रतिनिधित्व कर सकते हैं। और अगर हमें केवल अंग्रेजी के साथ-साथ यूरोपीय भाषाओं का एक छोटा सा चयन करना है, और किसी भी समय हम जिस यूरोपीय भाषा के साथ काम कर रहे हैं, उसे चुन सकते हैं। -इसके साथ दूर हो जाओ, भी।