在二进制文件Python 3.4中编写二进制字符串

时间:2015-04-23 20:49:51

标签: file python-3.x binary

我尝试将字符串中的二进制数据写入二进制文件。我的字符串只包含0和1.我试着这样做

file = open('file.bin','wb')
d = pack(str(len(code))+'s', bytes(code, 'UTF-8'))
file.write(d)

但我只有txt个文件。并没有一个HEX编辑器正确看到它。我做错了什么? Python 3.4版 我有一个看起来像这样的字符串

 000101101100000000010010110000010011000000010010001000100000000000010111110000110100001100010001

这是96 0和1,行长度总是16的倍数。我需要在二进制文件中设置0和1,但如果以这种方式写入,我有HEX readactor:

00110000 00110000 00110000 00110001 00110000 00110001 00110001 00110000 00110001 00110001 00110000 00110000 00110000 00110000 00110000 00110000
00110000 00110000 00110000 00110001 00110000 00110000 00110001 00110000 00110001 00110001 00110000 00110000 00110000 00110000 00110000 00110001
00110000 00110000 00110001 00110001 00110000 00110000 00110000 00110000 00110000 00110000 00110000 00110001 00110000 00110000 00110001 00110000
00110000 00110000 00110001 00110000 00110000 00110000 00110001 00110000 00110000 00110000 00110000 00110000 00110000 00110000 00110000 00110000
00110000 00110000 00110000 00110001 00110000 00110001 00110001 00110001 00110001 00110001 00110000 00110000 00110000 00110000 00110001 00110001
00110000 00110001 00110000 00110000 00110000 00110000 00110001 00110001 00110000 00110000 00110000 00110001 00110000 00110000 00110000

对于每1或0,我将8个符号用于其ASCII码。

我试着以悄悄的方式制作它:

cur = 0
while cur < len(code):
    file.write(chr(int(code[cur:cur+8], 2)))
    cur += 8

如果我在文件中写这个符号,它可以正常用于chr(0b00010110),在HEX编辑器中我会看到00010110正确的位,但是这个方法不适用于我的所有字符串,值int 192和22(mb更多)我有一个错误:

File "C:\Python34\lib\encodings\cp1251.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\xc0' in position 0: character maps to <undefined>

怎么了?

我发现上一个方法存在问题。它适用于UTF-8编码,我尝试将8位转换为char,在UTF-8中我们只能在1字节中转换7位,因为1位(第一个)始终为0.这样,我们可以&#39; t编码超过01111111的数字。寻找下一个...

1 个答案:

答案 0 :(得分:-1)

我在使用另一种编码和写字节时找到了这个问题的答案:

file = open('file.bin','wb')
cur = 0
while cur < len(code):
    c = int(code[cur:cur+8], 2)
    file.write(bytes(chr(c), 'iso8859-1'))
    cur += 8

我用0和1写了字符串:     000101101100000000010010110000010011000000010010001000100000000000010111110000110100001100010001

如果我用记事本打开文件,我会看到АБ0" ГC一些符号未显示......但是如果我将以十六进制编辑器打开文件,我会看到:

00010110 11000000 00010010 11000001 00110000 00010010 00100010 00000000 00010111 11000011 01000011 00010001

最佳96位!

相关问题