2013-06-27 7 views
12

मैं पाइथन का उपयोग करके बाइट मोड में फ़ाइल में बाइट्स की एक स्ट्रिंग कैसे लिखूं?पायथन लिखने के लिए बाइट्स की स्ट्रिंग

मेरे पास है:

['0x28', '0x0', '0x0', '0x0'] 

मैं कैसे लिख सकता हूँ 0x28, 0x0, 0x0, एक फाइल करने के लिए 0x0? मुझे नहीं पता कि इस स्ट्रिंग को एक वैध बाइट में कैसे बदला जाए और इसे लिखें।

उत्तर

12

एक bytearray() या bytes() वस्तु को मानचित्र, तो फाइल करने के लिए है कि लिखें:

with open(outputfilename, 'wb') as output: 
    output.write(bytearray(int(i, 16) for i in yoursequence)) 

एक अन्य विकल्प bytes मूल्य में अपने हेक्स तार चालू करने के लिए binascii.unhexlify() function उपयोग करने के लिए है:

from binascii import unhexlify 

with open(outputfilename, 'wb') as output: 
    output.write(unhexlify(''.join(format(i[2:], '>02s') for i in b))) 

यहां हमें पहले 0x भाग को काटना होगा, फिर शून्य के साथ इसे पैड करने के लिए मान को दोबारा सुधारना होगा और पूरे एक स्ट्रिंग में शामिल होना होगा।

+0

यह मेरे लिए काम करता – zhaozhi

6

अजगर 3.x में, bytes() एक बाइट अनुक्रम में एक पूर्णांक अनुक्रम हो जाएगा:

>>> bytes([1,65,2,255]) 
b'\x01A\x02\xff' 

एक जनरेटर अभिव्यक्ति पूर्णांकों में अपने अनुक्रम कन्वर्ट करने के लिए इस्तेमाल किया जा सकता (ध्यान दें कि int(x,0) एक पूर्णांक के लिए एक स्ट्रिंग में कनवर्ट करता है । का उपसर्ग के अनुसार 0x का चयन करता है हेक्स):

>>> list(int(x,0) for x in ['0x28','0x0','0x0','0x0']) 
[40, 0, 0, 0] 

उन्हें संयोजन:

>>> bytes(int(x,0) for x in ['0x28','0x0','0x0','0x0']) 
b'(\x00\x00\x00' 

और उनमें लेखन आउट:

>>> L = ['0x28','0x0','0x0','0x0'] 
>>> with open('out.dat','wb') as f: 
... f.write(bytes(int(x,0) for x in L)) 
... 
4 
संबंधित मुद्दे