বাইটগুলিকে ইনটে রূপান্তর করবেন?


92

আমি বর্তমানে একটি এনক্রিপশন / ডিক্রিপশন প্রোগ্রামে কাজ করছি এবং আমার বাইটসকে একটি পূর্ণসংখ্যায় রূপান্তর করতে সক্ষম হওয়া দরকার। আমি জানি:

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

তবুও আমি উল্টোটি কীভাবে করব তা খুঁজে পাচ্ছি না। আমি কি ভয়ানক ভুল করছি?


4
রয়েছে structমডিউল যদি আপনি একযোগে একাধিক ভেরিয়েবল রূপান্তর করতে চাই।
tdelaney


বিপরীত:b'\x03'[0]
djvg

উত্তর:


147

ধরে নিই যে আপনি কমপক্ষে 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)-২৮ প্রদান করেন, যখন ord()বা int.from_bytesস্বাক্ষরবিহীন মোডে 228 প্রদান করেন
পিটার ডিগ্রোপার

8

বাইটগুলির তালিকা সাবস্ক্রিপ্টযোগ্য (কমপক্ষে পাইথন ৩.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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.