1

基本上,我只是想在编辑后将一个字符串写入文件,作为概念验证,我只是想做出应该是毫无意义的改变。但是,如下例所示,即使这样也会由于某种原因使我的输出大小加倍。有谁知道为什么会这样?

content = StringIO.getvalue()
with open("real.png", 'wb') as dump:
    dump.write(content) #35KB
content = [str(ord(char)) for char in content]
content = "".join([hex(int(char)).lstrip("0x").zfill(2) for char in content])
with open("new.png", "wb") as dump:
    dump.write(content) #70KB
4

1 回答 1

7

您正在将每个字节转换为代表该字节十六进制值的 2 字节字符串。十六进制字符串表示原始字节不同。

如果这没有使文件大小增加一倍,我会感到非常惊讶。

如果您使用 HEX 编辑器查看将字节显示为十六进制字符的原始图像,那么您会将该数据的编辑器表示与文件的实际内容混淆。

如果您想更有效地完成该任务,您可以使用该binascii.hexlify()函数以更少的代码完成它。镜像操作称为binascii.unhexlify()

from binascii import hexlify, unhexlify

content = StringIO.getvalue()
hex_content = hexlify(content)
same_content = unhexlify(hex_content)
assert content == same_content
于 2013-07-09T15:17:51.793 回答