将 1 和 0 的字符串写入二进制文件?

2022-09-04 06:25:55

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

谢谢。


答案 1

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

>>> int("00100101", 2)
37

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

>>> chr(_)
'%'

的结果可以简单地写入文件(以二进制模式打开)与方法。chrfile.write


答案 2

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

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

这会将位字符串拆分为 8 个字符的块(如果您的字符串不是 8 长的倍数,则应先将其填充),将每个块转换为整数,然后将整数列表转换为可以直接写入二进制文件的整数(无需将其转换为字符串):bytearray

>>> with open('somefile', 'wb') as f:
...     f.write(the_bytearray)

如果你有更多这样的任务,那么有一些库可以提供帮助,例如,这是使用我的位字符串模块的相同转换:

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