Python窗口将十六进制写入到文件中

Python窗口将十六进制写入到文件中,python,windows,python-2.7,binary,hex,Python,Windows,Python 2.7,Binary,Hex,我有以下脚本,将二进制文件作为十六进制保存到变量中,并将其作为二进制文件转储到文件中,所有这些在Linux下都可以正常工作,但在Windows下失败,我不知道为什么: import os, os.path from ctypes import * import sys, binascii current_dir = r".\\" startup = "4d5a90000300000004000000ffff0000b800000000000000400000000000000000000000

我有以下脚本,将二进制文件作为十六进制保存到变量中,并将其作为二进制文件转储到文件中,所有这些在Linux下都可以正常工作,但在Windows下失败,我不知道为什么:

import os, os.path
from ctypes import *
import sys, binascii

current_dir = r".\\"
startup = "4d5a90000300000004000000ffff0000b800000000000000400000000000000000000000000000000000000000000000000000000000000000" # snipped, too big to have it here

def DumpStartupFile():
        startupbin=binascii.unhexlify(startup)
        o=open(current_dir+"\\startup.exe","w")
        o.write(startupbin)

if os.path.isfile(current_dir+"\\startup.exe"):
        True
else:
        DumpStartupFile()

知道为什么在Windows下会失败吗?

在写入二进制数据时,您总是希望以二进制模式打开文件:

o=open(current_dir+"\\startup.exe","wb")
o.write(startupbin)
特别是在Windows上,以文本模式打开文件会导致换行在写入时转换为平台本机值,但这对于二进制数据来说是不可取的行为

从:

默认情况下使用文本模式,该模式可以在写入时将
'\n'
字符转换为平台特定的表示形式,在读取时再转换回平台特定的表示形式。因此,在打开二进制文件时,您应该在mode值后附加
'b'
,以二进制模式打开文件,这将提高可移植性。(添加
'b'
即使在不以不同方式处理二进制文件和文本文件的系统上也很有用,因为它可以作为文档使用。)


哎呀,我想你是对的,在Linux下没有指定二进制模式是不会失败的,我想这就是问题所在,让我看看。@xtmtrx:在Linux上,
\n
是换行符的正确表示形式,因此它们不会在那里翻译。:-)