উত্তর:
মনে করুন আপনার হেক্স স্ট্রিংটি এরকম কিছু
>>> hex_string = "deadbeef"
>>> hex_data = hex_string.decode("hex")
>>> hex_data
"\xde\xad\xbe\xef"
>>> bytes.fromhex(hex_string) # Python ≥ 3
b'\xde\xad\xbe\xef'
>>> bytearray.fromhex(hex_string)
bytearray(b'\xde\xad\xbe\xef')
bytes
এটি একটি অপরিবর্তনীয় সংস্করণ নোট bytearray
।
string
-> bytes
অবজেক্টের সন্ধান করে তবে এটি `বাইটস.ফ্রমেহেক্স (" 000102030405060708090A0B0C0D0E0F ") yield যা দেয় b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f'
। প্রশ্নটি বাইট অ্যারের জন্য জিজ্ঞাসা করায় একটি উত্তর হিসাবে পোস্ট করা হচ্ছে না, তবে বাইটে হেক্সট অনুসন্ধানের সময় এটি আমার প্রথম আঘাত হওয়ায় এটি এখানে পোস্ট করা।
hex_string.decode("hex")
পাইথন ২.7 এ কাজ করছে। আমি শুধু আমার উপর পরীক্ষা Python 2.7.10 (default, May 23 2015, 09:44:00) [MSC v.1500 64 bit (AMD64)] on win32
।
bytes.fromhex
যখন ইনপুট স্ট্রিং অক্ষরের একটি বিজোড় সংখ্যা হয়েছে একটি ত্রুটি ছোঁড়া: bytes.fromhex("aab")
→ ValueError: non-hexadecimal number found in fromhex() arg at position 3
।
বাইটায়ারে একটি অন্তর্নির্মিত ফাংশন রয়েছে যা আপনার ইচ্ছা অনুযায়ী করে।
bytearray.fromhex("de ad be ef 00")
এটি একটি বাইটায়ারে ফিরিয়ে দেয় এবং এটি স্পেস বিভাজক বা তার সাথে ছাড়াই হেক্স স্ট্রিং পড়তে পারে।
hex_string.decode("hex")
করে , যেখানে নেই।
আমি যদি সঠিকভাবে বুঝতে পারি তবে আপনার বিন্যাসি.ইনহেক্সলিফের সন্ধান করা উচিত
import binascii
a='45222e'
s=binascii.unhexlify(a)
b=[ord(x) for x in s]
unhexlify
এখানে যান সবচেয়ে কার্যকর উপায়, কিন্তু সুপারিশ করবে যে b = bytearray(s)
ব্যবহার তুলনায় ভালো হবে ord
। পাইথনের যেহেতু কেবল বাইটের অ্যারেগুলির জন্য একটি অন্তর্নির্মিত টাইপ রয়েছে তাই আমি অবাক হয়েছি যে কেউ এটি ব্যবহার করছে না
ধরে নিচ্ছি আপনার কাছে বাইট স্ট্রিং রয়েছে
"\ X12 \ x45 \ x00 \ xAB"
এবং আপনি কীভাবে বাইটস এবং তার ধরণের পরিমাণ জানেন তা আপনি এই পদ্ধতির ব্যবহার করতে পারেন
import struct
bytes = '\x12\x45\x00\xAB'
val = struct.unpack('<BBH', bytes)
#val = (18, 69, 43776)
আমি যেমন বিন্যাসের স্ট্রিংয়ের শুরুতে সামান্য এন্ডিয়ান ('<' চরিত্রের ব্যবহার করে) নির্দিষ্ট করেছি ফাংশনটি দশমিক সমতুল্য ফিরে পেয়েছে।
0x12 = 18
0x45 = 69
0xAB00 = 43776
বি স্বাক্ষরযুক্ত এক বাইট (8 বিট) এর সমান
এইচ দুটি বাইট (16 বিট) স্বাক্ষরবিহীন সমান
আরও উপলব্ধ অক্ষর এবং বাইট মাপ এখানে পাওয়া যাবে
সুবিধাগুলি হ'ল ..
আপনি একাধিক বাইট এবং মানগুলির শেষটি নির্দিষ্ট করতে পারেন
অসুবিধেও ..
আপনার ডিলের ধরণ এবং দৈর্ঘ্যটি সত্যই আপনার জানা উচিত
আপনি পাইথন স্ট্যান্ডার্ড লাইব্রেরিতে কোডেক্স মডিউলটি ব্যবহার করতে পারেন , যেমন
import codecs
codecs.decode(hexstring, 'hex_codec')
def hex2bin(s):
hex_table = ['0000', '0001', '0010', '0011',
'0100', '0101', '0110', '0111',
'1000', '1001', '1010', '1011',
'1100', '1101', '1110', '1111']
bits = ''
for i in range(len(s)):
bits += hex_table[int(s[i], base=16)]
return bits
একটি ভাল একটি লাইনার হ'ল:
byte_list = map(ord, hex_string)
এটি স্ট্রিংয়ের প্রতিটি চরকে পুনরাবৃত্তি করবে এবং এটি অর্ড () ফাংশনের মাধ্যমে চালাবে। শুধুমাত্র পাইথন ২.6 এ পরীক্ষা করা হয়েছে, 3.0+ সম্পর্কে খুব বেশি নিশ্চিত নয়।
-Josh
byte_list = bytearray(hex_string)