写一个1和0的字符串到二进制文件?

Use*_*er0 11 c python java bash

我想取一个1和0的字符串并将其转换为实际的二进制文件(只需将1和0的字符串写入文件就可以使其成为包含"00110001"和"00110000"的ascii文件).我更喜欢在python中或直接从bash shell中执行此操作,但java或C也可以.这可能是一次性使用.

谢谢.

Eli*_*sky 17

在Python中,使用int内置函数将0和1的字符串转换为数字:

>>> int("00100101", 2)
37
Run Code Online (Sandbox Code Playgroud)

然后使用chr内置函数将8位整数(即包含范围0-255)转换为字符.

>>> chr(_)
'%'
Run Code Online (Sandbox Code Playgroud)

chr可以使用该file.write方法将结果简单地写入文件(以二进制模式打开).

  • @Tyler:然后他/她应该问?此外,我期望+2学习新的和有用的东西;-) (2认同)
  • 当然,如果字符串的长度超过 8 个字符,那么这将不起作用,所以这只是解决方案的一半。 (2认同)

Sco*_*ths 6

如果你有超过8个字符要转换(我假设你这样做)那么你需要这样的东西(使用Python):

>>> b = '0010101001010101010111101010100101011011'
>>> bytearray(int(b[x:x+8], 2) for x in range(0, len(b), 8))
bytearray(b'*U^\xa9[')
Run Code Online (Sandbox Code Playgroud)

这会将位串分成8个字符块(如果你的字符串不是8长的倍数你应该先填充它),将每个块转换成一个整数,然后将整数列表转换为bytearray可以直接写入的整数列表你的二进制文件(没有必要将它转换为字符串):

>>> with open('somefile', 'wb') as f:
...     f.write(the_bytearray)
Run Code Online (Sandbox Code Playgroud)

如果您有更多这样的任务,那么有些库可以提供帮助,例如,使用我的bitstring模块进行相同的转换:

>>> from bitstring import BitArray
>>> with open('somefile', 'wb') as f:
...     BitArray(bin=b).tofile(f)
Run Code Online (Sandbox Code Playgroud)

  • 我还没有尝试过这个,但我肯定想知道为什么它被否决了,因为这似乎正是我想要做的。 (2认同)