将字符串更改为二进制,然后将其写入文件

时间:2019-03-02 01:36:04

标签: python-2.7 file binary

当前,我必须将二进制字符串写入文件---但是,我需要将其写入二进制文件。例如,给我字符串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)

1 个答案:

答案 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'。