文件中不需要的十六进制值
Unwanted hex value in file
我创建了一个小 python3 脚本如下:
import sys
with open(sys.argv[1], 'r') as f:
hex_data = f.readline().split()
with open('hexConverted', 'a') as e:
for i in hex_data:
print("Writing {} in file".format(i)) #for debugging
e.write(chr(int(i, 16)))
读取格式如下的文件'f':
89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52
并创建一个新文件,其十六进制值与上面提供的十六进制值相同。但它每次都会在开头附加一个不需要的 \xC2。
$ hexdump -C hexConverted
00000000 c2 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 |..PNG........IHD|
00000010 52 |R|
00000011
甚至调试 print 命令也没有提到这个十六进制值。为什么会这样?
为了澄清我的评论,您需要将 "b" 添加到 open,然后将一个字节对象传递给 write。如果你不这样做,它会尝试将文件编码为 unicode,而 c2 是一个特殊的 unicode 代码。
import sys
with open(sys.argv[1], 'r') as f:
hex_data = f.readline().split()
with open('hexConverted', 'ab') as e:
for i in hex_data:
print("Writing {} in file".format(i))
e.write(int(i,16).to_bytes(1,'big'))
我创建了一个小 python3 脚本如下:
import sys
with open(sys.argv[1], 'r') as f:
hex_data = f.readline().split()
with open('hexConverted', 'a') as e:
for i in hex_data:
print("Writing {} in file".format(i)) #for debugging
e.write(chr(int(i, 16)))
读取格式如下的文件'f':
89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52
并创建一个新文件,其十六进制值与上面提供的十六进制值相同。但它每次都会在开头附加一个不需要的 \xC2。
$ hexdump -C hexConverted
00000000 c2 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 |..PNG........IHD|
00000010 52 |R|
00000011
甚至调试 print 命令也没有提到这个十六进制值。为什么会这样?
为了澄清我的评论,您需要将 "b" 添加到 open,然后将一个字节对象传递给 write。如果你不这样做,它会尝试将文件编码为 unicode,而 c2 是一个特殊的 unicode 代码。
import sys
with open(sys.argv[1], 'r') as f:
hex_data = f.readline().split()
with open('hexConverted', 'ab') as e:
for i in hex_data:
print("Writing {} in file".format(i))
e.write(int(i,16).to_bytes(1,'big'))