2011-09-29 13 views
6

कनवर्ट करना मुझे एक int/char (char अधिमानतः) में हेक्स बदलने में कुछ कठिनाई हो रही है। वेबसाइट के माध्यम से; http://home2.paulschou.net/tools/xlate/ मैं डीईसी/चार्ज बॉक्स में हेक्स बॉक्स में सी 0 ए 80026 का हेक्स दर्ज करता हूं, यह आईपी को सही तरीके से आउटपुट करता है जिसमें मुझे उम्मीद है कि इसमें शामिल है।पायथन - हेक्स से INT/CHAR

यह डेटा किसी बाहरी डेटाबेस से खींचा जा रहा है और मुझे पता नहीं है कि यह कैसे सहेजा जा रहा है, इसलिए मुझे हेक्स स्ट्रिंग के साथ ही काम करना है।

मैंने binascii.unhexlify फ़ंक्शन का उपयोग करके यह देखने के लिए binascii.unhexlify फ़ंक्शन का उपयोग करने का प्रयास किया है, लेकिन मुझे डर है कि मुझे हेक्स की पर्याप्त समझ नहीं हो सकती है कि मैं जो कर रहा हूं उसकी सराहना करता हूं।

एक int() कास्ट का उपयोग करके प्रिंट करने के लिए प्रयास करने से भी आवश्यक परिणाम नहीं मिले हैं। मुझे उस हेक्स स्ट्रिंग (या एक समान) से मूल आईपी में बदलने के लिए कुछ तरीका चाहिए।

अद्यतन: भविष्य में इस पर आने वाले किसी भी व्यक्ति के लिए मैंने नीचे दिए गए उत्तर को थोड़ा उपयोग करके आईपी के रूप में सटीक प्रिंटआउट प्रदान करने के लिए संशोधित किया;

dec_output = str(int(hex_input[0:2], 16)) + "." + str(int(hex_input[2:4], 16)) + "." + str(int(hex_input[4:6], 16)) + "." + str(int(hex_input[6:8], 16)) 
+0

[कन्वर्ट हेक्स स्ट्रिंग के संभावित डुप्लिकेट पायथन में int करने के लिए] (http://stackoverflow.com/questions/ 209513/कन्वर्ट-हेक्स-स्ट्रिंग-टू-इंट-इन-पायथन) –

+0

यह समाधान मेरी समस्या के साथ काम नहीं करता है – Draineh

+0

कृपया बताएं कि डुप्लिकेशंस प्रश्न डुप्लिकेट नहीं है। विवरण मायने रखता है। "मेरी समस्या के साथ काम नहीं करता है" कुछ भी मतलब है अस्पष्ट है। –

उत्तर

6

आप इस से 4 अलग संख्या प्राप्त करने के लिए चाहते हैं, तो 4 अलग संख्या के रूप में मानते हैं। आपको binascii की आवश्यकता नहीं है।

hex_input = 'C0A80026' 
dec_output = [ 
    int(hex_input[0:2], 16), int(hex_input[2:4], 16), 
    int(hex_input[4:6], 16), int(hex_input[6:8], 16), 
] 
print dec_output # [192, 168, 0, 38] 

यह सामान्यीकृत किया जा सकता है, लेकिन मैं आप के लिए एक व्यायाम के रूप में यह छोड़ देंगे।

+0

बिल्कुल सही, धन्यवाद – Draineh

0

मुझे आशा है कि यह आप क्या अपेक्षा है:

hex_val = 0x42424242  # hexadecimal value 
int_val = int(hex_val) # integer value 
str_val = str(int_val) # string representation of integer value 
+0

शाब्दिक '0x4242422' पहले से ही एक पूर्णांक बनाता है, 'int (hex_val)' अनावश्यक है। –

4

तुम भी chr समारोह पड़ सकता है:

chr(65) => 'A' 
+0

सीआर स्वीकार करता है केवल प्रश्नों को स्पष्ट करता है कि उपयोगकर्ता को एक इंट/चार (एक int से char नहीं) में हेक्स को बदलने की आवश्यकता है और chr केवल पूर्णांक स्वीकार करता है, इसलिए यह कोई समाधान नहीं है। –

1
>>> htext='C0A80026' 
>>> [int(htext[i:i+2],16) for i in range(0,len(htext),2)] 
# [192, 168, 0, 38] 
6

एक आसान तरीका

>>> s = 'C0A80026' 
>>> map(ord, s.decode('hex')) 
[192, 168, 0, 38] 
>>> 

यदि आप सूची comprehensions पसंद करते हैं

>>> [ord(c) for c in s.decode('hex')] 
[192, 168, 0, 38] 
>>> 
+0

अच्छा एक।मैं _personally_ इसे एक सूची समझ के रूप में लिखूंगा, लेकिन यह पूरी तरह से स्वाद है। मुझे 'डीकोड' और 'ord' के उपयोग पसंद है। – neil

+0

धन्यवाद @neil। मुझे सूची समझ भी पसंद है। –

संबंधित मुद्दे