बाइट्स को इंट में बदलें?


91

मैं वर्तमान में एक एन्क्रिप्शन / डिक्रिप्शन प्रोग्राम पर काम कर रहा हूं और मुझे बाइट्स को पूर्णांक में बदलने में सक्षम होने की आवश्यकता है। मुझे पता है:

bytes([3]) = b'\x03'

फिर भी मुझे पता नहीं चल सका है कि उलटा कैसे किया जाता है। मैं बहुत गलत क्या कर रहा हूँ?


2
structयदि आप एक ही बार में कई चर बदलना चाहते हैं तो मॉड्यूल भी है ।
tdelaney


प्रतिलोम:b'\x03'[0]
djvg

जवाबों:


146

मान लें कि आप कम से कम 3.2 पर हैं, इसके लिए एक बिल्ट इन है :

int.from_bytes ( बाइट्स, बाइटऑर्डर, *, हस्ताक्षरित = गलत )

...

तर्क बाइट्स या तो एक बाइट्स की तरह ऑब्जेक्ट या एक चलने योग्य उत्पादक बाइट्स होना चाहिए।

बाइटऑर्डर तर्क पूर्णांक को दर्शाने के लिए प्रयुक्त बाइट क्रम को निर्धारित करता है। यदि बाइटऑर्डर "बड़ा" है, तो बाइट सरणी की शुरुआत में सबसे महत्वपूर्ण बाइट है। यदि बाइटऑर्डर "छोटा" है, तो बाइट सरणी के अंत में सबसे महत्वपूर्ण बाइट है। होस्ट सिस्टम के मूल बाइट ऑर्डर का अनुरोध करने के लिए, बाइट ऑर्डर वैल्यू के रूप में sys.byteorder का उपयोग करें।

हस्ताक्षरित तर्क इंगित करता है कि पूर्णांक का प्रतिनिधित्व करने के लिए दो के पूरक का उपयोग किया जाता है या नहीं।


## Examples:
int.from_bytes(b'\x00\x01', "big")                         # 1
int.from_bytes(b'\x00\x01', "little")                      # 256

int.from_bytes(b'\x00\x10', byteorder='little')            # 4096
int.from_bytes(b'\xfc\x00', byteorder='big', signed=True)  #-1024

धन्यवाद। क्या एकल बाइट्स / चार्ट के बीच int.from_bytesऔर अंतर है ord(b'\x03')?
बिल

एकमात्र अंतर जो मैं सोच सकता हूं, वह यह है कि int.from_bytesबाइट को एक हस्ताक्षरित पूर्णांक के रूप में व्याख्या कर सकते हैं यदि आप इसे बताते हैं - int.from_bytes(b'\xe4', "big", signed=True)रिटर्न -28, जबकि ord()या int.from_bytesअहस्ताक्षरित मोड में 228 देता है।
पीटर डीग्लॉपर

8

बाइट्स की सूचियाँ ग्राह्य हैं (कम से कम पायथन 3.6 में)। इस तरह आप व्यक्तिगत रूप से प्रत्येक बाइट के दशमलव मान को पुनः प्राप्त कर सकते हैं।

>>> intlist = [64, 4, 26, 163, 255]
>>> bytelist = bytes(intlist)       # b'@x04\x1a\xa3\xff'

>>> for b in bytelist:
...    print(b)                     # 64  4  26  163  255

>>> [b for b in bytelist]           # [64, 4, 26, 163, 255]

>>> bytelist[2]                     # 26 

1
int.from_bytes( bytes, byteorder, *, signed=False )

मेरे साथ काम नहीं करता है मैंने इस वेबसाइट से फ़ंक्शन का उपयोग किया है, यह अच्छी तरह से काम करता है

https://coderwall.com/p/x6xtxq/convert-bytes-to-int-or-int-to-bytes-in-python

def bytes_to_int(bytes):
    result = 0
    for b in bytes:
        result = result * 256 + int(b)
    return result

def int_to_bytes(value, length):
    result = []
    for i in range(0, length):
        result.append(value >> (i * 8) & 0xff)
    result.reverse()
    return result
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.