Int को hex string में कैसे कन्वर्ट करें?


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) = 'A'। क्या यह एक नया जोड़ है?
मृत्युशैय्या

2
@diedthreetimes, chrASCII को बिल्कुल भी शामिल नहीं करता है - यह बस एक नंबर लेता है और एक-एक बाइट बनाता है जहां बाइट की क्रमिक मान संख्या होती है। ASCII और ASCII- संगत एनकोडिंग तब आते हैं जब आप लिखते हैं और प्रदर्शन करते हैं।
माइक ग्राहम

1
@diedthreetimes, उदाहरण के लिए, वे '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' f'{15:x}'एक प्रारूप स्ट्रिंग को सूचित करने के लिए है


इस स्वच्छ सुविधा पर संदर्भ के लिए, PEP 498 - शाब्दिक स्ट्रिंग इंटरपोलेशन
MFT

1
IMHO, थोड़ा और "पठनीय" विकल्प '0x {: X}' हो सकता है। प्रारूप (15) (नोटिस एक्स अपरकेस में है)। 2034 के लिए यह 7f2 के बजाय 0x7F2
Pavel Sapehin

11

यदि आप एक मान <255 (एक बाइट अहस्ताक्षरित, uint8_t) के साथ एक संरचना को पैक करना चाहते हैं और एक वर्ण की एक स्ट्रिंग के साथ समाप्त होते हैं, तो आप शायद c के बजाय प्रारूप B की तलाश कर रहे हैं । C एक वर्ण को एक स्ट्रिंग में परिवर्तित करता है (अपने आप से उपयोगी नहीं) जबकि B एक पूर्णांक में परिवर्तित करता है।

struct.pack('B', 65)

(और हां, 65 \ x41 है, न कि \ x65।)

संरचना वर्ग संचार या अन्य उपयोगों के लिए सुविधा का समर्थन करेगा।


जितना समय मुझे ढांचा ढूंढने में लगा है ('बी', <पूर्णांक>) चौंका देने वाला है। धन्यवाद।
सीन डी।

7

ध्यान दें कि बड़े मूल्यों के लिए, hex()अभी भी काम करता है (कुछ अन्य उत्तर नहीं हैं):

x = hex(349593196107334030177678842158399357)
print(x)

पायथन 2: 0x4354467b746f6f5f736d616c6c3f7dL
पायथन 3:0x4354467b746f6f5f736d616c6c3f7d

डिक्रिप्ट किए गए RSA संदेश के लिए, कोई भी निम्न कार्य कर सकता है:

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 2 हेक्स मुद्रित वर्ण के लिए है) तो 3 आपको निम्नलिखित देगा

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

3

मैं एक यादृच्छिक पूर्णांक शुरुआत में एक # के साथ छह अंकों के हेक्स स्ट्रिंग में परिवर्तित करना चाहता था। इसे पाने के लिए मैंने प्रयोग किया

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

6
मुझे लगता है तुम मतलब है "#%6x" % random.randint(0x0, 0xFFFFFF)। ( %पहले एक लापता है 6और randint2 पैरामीटर लेता है -Lower और ऊपरी सीमा-)
pacha

5
यदि आप रिक्त स्थान नहीं चाहते हैं तो% 06x होना चाहिए
Janus Troelsen

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'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.