Python write string of bytes to file

十年热恋 提交于 2019-12-12 07:17:52

问题


How do I write a string of bytes to a file, in byte mode, using python?

I have:

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

How do I write 0x28, 0x0, 0x0, 0x0 to a file? I don't know how to transform this string to a valid byte and write it.


回答1:


Map to a bytearray() or bytes() object, then write that to the file:

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

Another option is to use the binascii.unhexlify() function to turn your hex strings into a bytes value:

from binascii import unhexlify

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

Here we have to chop off the 0x part first, then reformat the value to pad it with zeros and join the whole into one string.




回答2:


In Python 3.X, bytes() will turn an integer sequence into a bytes sequence:

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

A generator expression can be used to convert your sequence into integers (note that int(x,0) converts a string to an integer according to its prefix. 0x selects hex):

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

Combining them:

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

And writing them out:

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


来源:https://stackoverflow.com/questions/17349918/python-write-string-of-bytes-to-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!