擅长:python、mysql、java
<pre><code>import base64
exe = 'c:/users/me/program.exe'
script = 'c:/users/me/newpython.py'
chunksize = 6144
linelength = 80
with open(exe,'rb') as inf, open(script,'w') as outf:
outf.write('program_data = """')
while True:
progdata = inf.read(chunksize)
if len(progdata):
progdata = progdata.encode("base64")
outf.writelines(progdata[i:i+linelength] for i in range(0, len(progdata), linelength))
else:
break
outf.write('""".decode("base64")')
</code></pre>
<p><strong>编辑:</strong></p>
<p>这个想法是在方便的块中处理输入文件,而不是将潜在的巨大文件读入内存。在</p>
<p>在base64编码块之后,我将它分成80个字符行(这基本上只是为了在文本编辑器中保持它的可管理性)并将其写入输出。在</p>
<p>我将数据包装在程序“u data=”“.”“.”中。解码(“base64”),这样当Python加载文件时,数据将自动解密-program_data将包含您想要的二进制数据。在</p>
<p>8096是一个脑屁-我想用8192字节(8KB)。然后我意识到还有第二个问题:编码一个长度不是3个字符的倍数的块会导致“=”填充的输出,这会过早地截断解码。我已经将块大小更改为6KB=512字节(默认的NTFS块大小)*3个字符*4(任意多个);这似乎与预期的一样。在</p>
<p>希望有帮助!在</p>