2012-01-26 9 views
5

मैं अपने स्ट्रिंग प्रतिनिधित्व 00: 16: 3e: 2f: ba: b7 में एक मैक पता 00163e2fbab7 (स्ट्रिंग के रूप में संग्रहीत) को कनवर्ट करना चाहता हूं। ऐसा करने का सबसे आसान तरीका क्या है?मैक संख्या को मैक स्ट्रिंग में कैसे परिवर्तित करें?

+0

मैक पता कैसे आप मिलता है के साथ काम करता है, और कैसे यह अब अपने कार्यक्रम में संग्रहित है? चूंकि यह 32-बिट पूर्णांक में फिट नहीं होगा, हो सकता है कि आपके पास पहले से ही एक स्ट्रिंग के रूप में है जिसे केवल सुधारने की आवश्यकता है? –

+0

@ जोचिम: यह एक स्ट्रिंग के रूप में संग्रहीत है। – Bruce

उत्तर

22

एक मौजूदा समारोह का लाभ लेने के लिए एक पूरी तरह घुमावदार विधि का उपयोग करें कि एक समय में समूह दो हेक्स अक्षर:

>>> ':'.join(s.encode('hex') for s in '00163e2fbab7'.decode('hex')) 
'00:16:3e:2f:ba:b7' 

अजगर 3 के लिए अपडेट किया गया:

>>> ':'.join(format(s, '02x') for s in bytes.fromhex('00163e2fbab7')) 
'00:16:3e:2f:ba:b7' 
+0

+1 सही! यह – juliomalegria

+0

+1 करने का सही काम होगा यह समाधान सबसे स्वाभाविक लगता है। –

10

grouper idiomzip(*[iter(s)]*n) का उपयोग करना:

In [32]: addr = '00163e2fbab7' 

In [33]: ':'.join(''.join(pair) for pair in zip(*[iter(addr)]*2)) 
Out[33]: '00:16:3e:2f:ba:b7' 

भी संभव हो, (और, वास्तव में, एक सा तेज):

In [36]: ':'.join(addr[i:i+2] for i in range(0,len(addr),2)) 
Out[36]: '00:16:3e:2f:ba:b7' 
+0

मेरे लिए वही: वाह (itertools महान हैं!)। – jlandercy

5

आप एक स्ट्रिंग s कि आप कोलन के साथ शामिल होने के लिए चाहते हैं, तो , यह काम कर जाना चाहिए।

':'.join([s[i]+s[i+1] for i in range(0,12,2)]) 
+1

के साझा करने के लिए धन्यवाद [i] + s [i + 1] '==>' s [i: i + 2] ' –

+0

@StevenRumbalski यह वही बात नहीं है। इसे इस तरह से बदलना एक दो-तत्व सरणी लौटाएगा। आप '' '। जॉइन (एस [i: i + 2]) का उपयोग कर सकते हैं। –

+0

@ माइकलियर: सुनिश्चित नहीं है कि आपका क्या मतलब है। '': '। (मैं [i] + s [i + 1] रेंज में (0,12,2)] में शामिल हों)' 'वही परिणाम देता है' ':'। शामिल हों ([s [i: i + 2] मैं रेंज में (0,12,2)]) 'जब मैं इसे चलाता हूं। स्ट्रिंग स्लाइसिंग एक सरणी वापस नहीं करता है। –

4

आप कर रहे हैं नियमित अभिव्यक्तियों के आदी आप इस अनपेक्षित दृष्टिकोण को आजमा सकते हैं:

>>> import re 
>>> s = '00163e2fbab7' 
>>> ':'.join(re.findall('..', s)) 
'00:16:3e:2f:ba:b7' 
0

> अच्छी तरह से अजगर 3

ap_mac = b'\xfe\xdc\xba\xab\xcd\xef' 
decoded_mac = hexlify(ap_mac).decode('ascii') 
formatted_mac = re.sub(r'(.{2})(?!$)', r'\1:', decoded_mac)