2013-06-27 2 views
12

파이썬을 사용하여 바이트 모드로 파일에 바이트 문자열을 쓰려면 어떻게해야합니까?파이썬은 파일에 바이트의 문자열을 작성합니다.

내가 가진 :

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

어떻게 파일에 0x28을,이 0x0, 0x0으로 0x0으로 쓰기합니까? 이 문자열을 유효한 바이트로 변환하고 쓰는 방법을 모르겠습니다. bytearray() 또는 bytes() 객체에

답변

12

지도, 파일에 그 쓰기 :

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으로 채우고 전체를 하나의 문자열로 결합해야합니다.

파이썬 3.X에서
+0

그것은 나를 위해 작동 – zhaozhi

6

, bytes()는 바이트 순서로 정수 순서를 설정합니다 : 발전기 표현은 정수로 순서를 변환 할 수 있습니다

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

(int(x,0)이 문자열을 정수로 변환하고 있습니다 .

>>> 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' 
프리픽스 항은 헥스 0x) 선택

그들를 작성하는 것은 :

>>> L = ['0x28','0x0','0x0','0x0'] 
>>> with open('out.dat','wb') as f: 
... f.write(bytes(int(x,0) for x in L)) 
... 
4 
관련 문제