আমি বর্তমানে একটি এনক্রিপশন / ডিক্রিপশন প্রোগ্রামে কাজ করছি এবং আমার বাইটসকে একটি পূর্ণসংখ্যায় রূপান্তর করতে সক্ষম হওয়া দরকার। আমি জানি:
bytes([3]) = b'\x03'
তবুও আমি উল্টোটি কীভাবে করব তা খুঁজে পাচ্ছি না। আমি কি ভয়ানক ভুল করছি?
আমি বর্তমানে একটি এনক্রিপশন / ডিক্রিপশন প্রোগ্রামে কাজ করছি এবং আমার বাইটসকে একটি পূর্ণসংখ্যায় রূপান্তর করতে সক্ষম হওয়া দরকার। আমি জানি:
bytes([3]) = b'\x03'
তবুও আমি উল্টোটি কীভাবে করব তা খুঁজে পাচ্ছি না। আমি কি ভয়ানক ভুল করছি?
b'\x03'[0]
উত্তর:
ধরে নিই যে আপনি কমপক্ষে 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 প্রদান করেন
বাইটগুলির তালিকা সাবস্ক্রিপ্টযোগ্য (কমপক্ষে পাইথন ৩.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
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
struct
মডিউল যদি আপনি একযোগে একাধিক ভেরিয়েবল রূপান্তর করতে চাই।