当前,我必须将二进制字符串写入文件---但是,我需要将其写入二进制文件。例如,给我字符串s =“ 1011001010111”。我希望能够以二进制格式将其写入文件。因此,当我将文件进行十六进制转储时,该文件将具有以下二进制输出:1011001010111。我曾考虑过逐个字符地遍历字符串以获取哪个位值,但是我遇到了将其以二进制格式写入的问题文件。
编辑:我的代码
bits2 = "000111010001110100011110000111110101"
int_value = int(bits[1::], base=2)
bin_array = struct.pack('i', int_value)
f = open("test.bnr", "wb")
f.write(bin_array)
答案 0 :(得分:1)
因为您的答案有些混乱,所以我将示例字符串"1011001010111"
用作示例。
这是将字符串写入二进制文件的代码。
import struct
bits = "1011001010111"
int_value = int(bits,2) # Convert the string to integer with base 2
bin_array = struct.pack('>i', int_value) # Pack the int value using a big-endian integer
with open("test.bnr", "wb") as f: # open the file in binary write mode
f.write(bin_array) # write to the file
根据 struct
模块的documentation,您可以看到您需要> 和 i 。
您可以使用unix终端以两种不同的方式转储文件:
hexdump -e '2/1 "%02x"' test.bnr
但是在这里,您将获得十六进制数,以后需要对其进行转换。
或者您可以使用此脚本读取文件并打印出二进制字符串。
with open('test.bnr', 'rb') as f:
for chunk in iter(lambda: f.read(32), b''):
print str(bin(int(chunk.encode('hex'),16)))[2:]
如您的问题所期望的那样,使用字符串“ 1011001010111” ,您会收到相同的字符串,将从文件中读取它。
使用第二个字符串(“ 000111010001110100011110000111110101” )会出现错误:
'i' format requires -2147483648 <= number <= 2147483647
这是因为'i'选项对于该数字不正确。 将此值转换为int会收到 7815160309 。该数字对于整数来说太大。
在这里,您需要使用'> Q'或'> q'。