将二进制字符串写入二进制文件Python 3.4
Write binary string in binary file Python 3.4
我试图将字符串中的二进制数据写入二进制文件。我的字符串只包含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)
工作正常,在十六进制编辑器中我将看到 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。这样,我们无法编码数量超过 01111111
。寻找下一个...
我在使用另一种编码和写入字节时找到了这个问题的答案:
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 位!
我试图将字符串中的二进制数据写入二进制文件。我的字符串只包含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)
工作正常,在十六进制编辑器中我将看到 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。这样,我们无法编码数量超过 01111111
。寻找下一个...
我在使用另一种编码和写入字节时找到了这个问题的答案:
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 位!