python - हरण - पूर्णांकों अर्थ




मैं पायथन में बाइट्स की एक सरणी के रूप में एक पूर्णांक को कैसे व्यवहार करूं? (4)

मैं पायथन ओ। विएत () फ़ंक्शन के परिणाम को डीकोड करने की कोशिश कर रहा हूं। पायथन डॉक्स के अनुसार यह रिटर्न:

एक ट्यूपल जिसमें इसकी पीआईडी ​​और निकास स्थिति संकेत होते हैं: एक 16-बिट संख्या, जिसका कम बाइट संकेत संख्या है जो प्रक्रिया को मार डाला है, और जिनकी उच्च बाइट निकलने की स्थिति है (यदि संकेत संख्या शून्य है); कम बाइट का उच्च बिट सेट किया जाता है यदि कोई कोर फ़ाइल तैयार की गई थी।

उच्च और निम्न बाइट को प्राप्त करने के लिए मैं बाहर निकलें स्थिति संकेत (जो एक पूर्णांक है) को कैसे समझूं? विशिष्ट होने के लिए, मैं निम्न कोड स्निपेट में उपयोग किए जाने वाले डिकोड फ़ंक्शन को कैसे लागू कर सकता हूं:

(pid,status) = os.wait()
(exitstatus, signum) = decode(status) 

इससे पहले कि लोग इसे खदेड़ते हैं, लेकिन यदि आप वास्तव में इसे एक पंक्ति पर चाहते हैं, तो आप यह कर सकते हैं:

(signum, exitstatus) = (status & 0xFF, (status >> 8) & 0xFF)

संपादित करें: इसे पीछे की ओर था


यह वह काम करेगा जो आप चाहते हैं:

signum = status & 0xff
exitstatus = (status & 0xff00) >> 8

आप संरचना मॉड्यूल के साथ अहस्ताक्षरित बाइट की एक स्ट्रिंग में अपने int को तोड़ सकते हैं:

import struct
i = 3235830701  # 0xC0DEDBAD
s = struct.pack(">L", i)  # ">" = Big-endian, "<" = Little-endian
print s         # '\xc0\xde\xdb\xad'
print s[0]      # '\xc0'
print ord(s[0]) # 192 (which is 0xC0)

यदि आप इस सरणी मॉड्यूल के साथ जोड़ते हैं तो आप यह अधिक आसानी से कर सकते हैं:

import struct
i = 3235830701  # 0xC0DEDBAD
s = struct.pack(">L", i)  # ">" = Big-endian, "<" = Little-endian

import array
a = array.array("B")  # B: Unsigned bytes
a.fromstring(s)
print a   # array('B', [192, 222, 219, 173])

exitstatus, signum= divmod(status, 256)






python