2011-04-14 14 views
28

की स्ट्रिंग में इंक स्वरूपित करें मुझे यादृच्छिक पूर्णांक (0-255) की सूची से हेक्स अंकों की एक स्ट्रिंग बनाने की आवश्यकता है। प्रत्येक हेक्स अंकों दो अक्षर का प्रतिनिधित्व करती जाना चाहिए: 5 - "05", 16 - "10", आदिहेक्स

उदाहरण:

Input: [0,1,2,3,127,200,255], 
Output: 000102037fc8ff 

मैं साथ आने के लिए प्रबंधित किया है:

#!/usr/bin/env python 

def format_me(nums): 
    result = "" 
    for i in nums: 
     if i <= 9: 
      result += "0%x" % i 
     else: 
      result += "%x" % i 
    return result 

print format_me([0,1,2,3,127,200,255]) 

हालांकि, यह थोड़ा अजीब दिखता है। क्या कोई आसान तरीका है?

उत्तर

3
a = [0,1,2,3,127,200,255] 
print str.join("", ("%02x" % i for i in a)) 

प्रिंट

000102037fc8ff 

(यह भी ध्यान रखें कि आपके कोड 10 से 15 तक की सीमा में पूर्णांकों के लिए असफल हो जायेगी)

30
>>> str(bytearray([0,1,2,3,127,200,255])).encode('hex') 
'000102037fc8ff' 
+3

+1 –

10

फिर भी एक और विकल्प binascii.hexlify है:

a = [0,1,2,3,127,200,255] 
print binascii.hexlify(bytes(bytearray(a))) 

प्रिंट

000102037fc8ff 

यह भी मेरी मशीन पर बड़ी स्ट्रिंग्स के लिए सबसे तेजी से संस्करण है।

अजगर 2.7 या इसके बाद के संस्करण, आप और भी अधिक

binascii.hexlify(memoryview(bytearray(a))) 

का उपयोग कर bytes कॉल द्वारा बनाई गई प्रतिलिपि सहेजने के द्वारा इस सुधार सकता है।

65
बस संपूर्णता के लिए

, आधुनिक .format() सिंटैक्स का उपयोग:,

>>> numbers = [1, 15, 255] 
>>> ''.join('{:02X}'.format(a) for a in numbers) 
'010FFF' 
8

मेरे अन्य जवाब देने के लिए इसी तरह के प्रारूप स्ट्रिंग दोहरा को छोड़कर:% स्वरूपण वूडू के बिना एक संस्करण के लिए

>>> numbers = [1, 15, 255] 
>>> fmt = '{:02X}' * len(numbers) 
>>> fmt.format(*numbers) 
'010FFF' 
संबंधित मुद्दे