কীভাবে ইনটকে একটি হেক্স স্ট্রিংয়ে রূপান্তর করবেন?


210

আমি একটি পূর্ণসংখ্যা নিতে চাই (যা <= 255 হবে), একটি হেক্স স্ট্রিং উপস্থাপনায়

উদাহরণস্বরূপ: আমি পাস করতে 65এবং বাইরে যেতে চাই '\x41', বা 255পেতে চাই '\xff'

আমি struct.pack('c',65 টি দিয়ে এটি করার চেষ্টা করেছি ), তবে এটি উপরের যে কোনও বিষয়কে হ্রাস করে 9যেহেতু এটি একটি একক চরিত্রের স্ট্রিং নিতে চায়।

উত্তর:


214

আপনি chrফাংশনটি সন্ধান করছেন।

আপনি পূর্ণসংখ্যার দশমিক উপস্থাপনা এবং পূর্ণসংখ্যার হেক্স উপস্থাপনার মিশ্রণ করছেন বলে মনে হচ্ছে, তাই আপনার কী প্রয়োজন তা সম্পূর্ণ পরিষ্কার নয়। আপনি যে বিবরণ দিয়েছিলেন তার উপর ভিত্তি করে, আমি মনে করি এই স্নিপেটগুলির মধ্যে একটিতে আপনি কী চান তা দেখায়।

>>> chr(0x65) == '\x65'
True


>>> hex(65)
'0x41'
>>> chr(65) == '\x41'
True

মনে রাখবেন যে এটি হেক্স হিসাবে পূর্ণসংখ্যা যুক্ত স্ট্রিং থেকে একেবারে পৃথক । যদি আপনি এটি চান তবে hexবিল্টিনটি ব্যবহার করুন ।


2
আমি ভেবেছিলাম chr রূপান্তরিত পূর্ণসংখ্যা ascii এ। সেক্ষেত্রে chr (65) = 'এ'। এটি কি নতুন সংযোজন?
20'17

2
@ ডিডথ্রি টাইমস, chrএএসসিআইআই মোটেও জড়িত নয় - এটি কেবল একটি সংখ্যা নেয় এবং একটি বাইট বাইট্রেস্টিং করে যেখানে বাইটের মূল মানটি সংখ্যা। ASCII এবং ASCII- সামঞ্জস্যপূর্ণ এনকোডিংগুলি যখন আপনি বাইটস্ট্রিংগুলি লিখে এবং প্রদর্শন করেন তখন তা কার্যকর হয়।
মাইক গ্রাহাম

1
@ ডিডথ্রি টাইমস, উদাহরণস্বরূপ, তারা 'A'লেখার এবং প্রদর্শন করার জন্য অন্য উপায় তৈরি করে আসেন '\x41'। সমস্ত strসত্যই যত্নশীল এটি পঁয়ত্রিশটি। জিনিসগুলি মানুষের দ্বারা বোধগম্য এবং ব্যবহারযোগ্য করে তোলার জন্য, এটি প্রায়শই এ।
মাইক গ্রাহাম

134

এটি 0x উপসর্গের সাথে একটি পূর্ণসংখ্যাকে 2 ডিজিটের হেক্স স্ট্রিংয়ে রূপান্তর করবে:

strHex = "0x%0.2X" % 255

2
আমি কোডটি এখানে সম্পাদনা করার এবং এটিতে এটি পরিবর্তন করার পরামর্শ দিচ্ছি: strHex = "0x% 0.2X"% পূর্ণসংখ্যার পরিবর্তনযোগ্য। (আমি নিজে সম্পাদনা করতে সক্ষম হইনি))
স্যামুয়েল



31

আমাকে এটি যুক্ত করুন, কারণ কখনও কখনও আপনি কেবল একক অঙ্কের উপস্থাপনা চান:

'{:x}'.format(15)
> f

এবং এখন নতুন f''ফর্ম্যাট স্ট্রিংগুলির সাহায্যে আপনি এটি করতে পারেন:

f'{15:x}'
> f

দ্রষ্টব্য: প্রাথমিক 'এফ' ইন f'{15:x}'হ'ল বিন্যাসের স্ট্রিংটি বোঝায়


এই পরিষ্কার বৈশিষ্ট্যটির জন্য রেফারেন্সের জন্য, পিইপি 498 - লিটারাল স্ট্রিং ইন্টারপোলেশন
এমএফটি

1
আইএমএইচও, আরও কিছু "পঠনযোগ্য" বিকল্পটি '0x {: এক্স}' হতে পারে format ফর্ম্যাট (15) (বিজ্ঞপ্তি এক্স বড় হাতের অক্ষরে রয়েছে)। 2034 এর জন্য এটি 7f2 এর পরিবর্তে 0x7F2 মুদ্রণ করবে
পাভেল সাপেইহিন

11

আপনি যদি কোনও মান <255 (একটি বাইট স্বাক্ষরযুক্ত, uint8_t) দিয়ে একটি স্ট্রাক প্যাক করতে এবং একটি অক্ষরের একটি স্ট্রিং দিয়ে শেষ করতে চান, আপনি সম্ভবত সি এর পরিবর্তে বি ফর্ম্যাটটি সন্ধান করছেন । সি একটি অক্ষরকে স্ট্রিংয়ে রূপান্তর করে (নিজে নিজে খুব বেশি দরকারী না) যখন বি পূর্ণসংখ্যা রূপান্তর করে।

struct.pack('B', 65)

(এবং হ্যাঁ, 65 হ'ল \ x41, \ x65 নয়))

কাঠামো শ্রেণিটি যোগাযোগ বা অন্যান্য ব্যবহারের জন্য স্বাচ্ছন্দ্যে অন্তরঙ্গতা পরিচালনা করবে।


স্ট্রাক্টপ্যাক ('বি', <ইন্টিজার>) সন্ধান করতে আমার যে পরিমাণ সময় লেগেছে তা বিস্ময়কর। ধন্যবাদ.
শন ডি

7

নোট করুন যে বড় মানগুলির জন্য, hex()এখনও কাজ করে (কিছু অন্যান্য উত্তর দেয় না):

x = hex(349593196107334030177678842158399357)
print(x)

পাইথন 2: 0x4354467b746f6f5f736d616c6c3f7dL
পাইথন 3:0x4354467b746f6f5f736d616c6c3f7d

একটি ডিক্রিপ্ট করা আরএসএ বার্তার জন্য, নিম্নলিখিতগুলি করতে পারেন:

import binascii

hexadecimals = hex(349593196107334030177678842158399357)

print(binascii.unhexlify(hexadecimals[2:-1])) # python 2
print(binascii.unhexlify(hexadecimals[2:])) # python 3

5

এটি আমার পক্ষে সবচেয়ে ভাল কাজ করেছে

"0x%02X" % 5  # => 0x05
"0x%02X" % 17 # => 0x11

(2) পরিবর্তন করুন যদি আপনি বড় প্রস্থের একটি নম্বর চান (2 2 হেক্স মুদ্রিত অক্ষরের জন্য) তবে 3 আপনাকে নিম্নলিখিতটি দেবে

"0x%03X" % 5  # => 0x005
"0x%03X" % 17 # => 0x011

3

আমি শুরুতে একটি # দিয়ে একটি এলোমেলো পূর্ণসংখ্যাটি একটি ছয় অঙ্কের হেক্স স্ট্রিংয়ে রূপান্তর করতে চেয়েছিলাম। এটি পেতে আমি ব্যবহার করেছি

"#%6x" % random.randint(0xFFFFFF)

6
আমি আপনি কি বলতে চান অনুমান করা "#%6x" % random.randint(0x0, 0xFFFFFF)। (একটা অনুপস্থিত %সামনে 6এবং randint2 পরামিতি -lower এবং উপরের bounds- নেয়)
Pacha

5
আপনি স্পেস না চাইলে% 06x হওয়া উচিত
জানুস ট্রয়লসন

3

সঙ্গে format(), অনুযায়ী বিন্যাস-উদাহরণ , আমরা করতে পারেন:

>>> # format also supports binary numbers
>>> "int: {0:d};  hex: {0:x};  oct: {0:o};  bin: {0:b}".format(42)
'int: 42;  hex: 2a;  oct: 52;  bin: 101010'
>>> # with 0x, 0o, or 0b as prefix:
>>> "int: {0:d};  hex: {0:#x};  oct: {0:#o};  bin: {0:#b}".format(42)
'int: 42;  hex: 0x2a;  oct: 0o52;  bin: 0b101010'

2
(int_variable).to_bytes(bytes_length, byteorder='big'|'little').hex()

উদাহরণ স্বরূপ:

>>> (434).to_bytes(4, byteorder='big').hex()
'000001b2'
>>> (434).to_bytes(4, byteorder='little').hex()
'b2010000'

1

এছাড়াও আপনি যে কোনও সংখ্যাকে যে কোনও বেসে হেক্সে রূপান্তর করতে পারেন। এই এক লাইন কোডটি এখানে ব্যবহার করুন এটি ব্যবহার করা সহজ এবং সহজ:

hex(int(n,x)).replace("0x","")

আপনার কাছে একটি স্ট্রিং রয়েছে nযা আপনার নম্বর এবং x সেই সংখ্যার ভিত্তি। প্রথমে এটি পূর্ণসংখ্যায় এবং তারপরে হেক্সে পরিবর্তন করুন তবে হেক্স এর 0xপ্রথমদিকে রয়েছে তাই replaceআমরা এটিকে সরিয়ে দিয়েছি।


-1

বিকল্প উপস্থাপনা হিসাবে আপনি ব্যবহার করতে পারেন

[in] '%s' % hex(15)
[out]'0xf'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.