2013-03-12 150 views
0

我有下面的脚本,将二进制文件保存为HEX到一个变量,并将其转换为二进制文件,在Linux下一切正常,但在Windows下失败,我不知道为什么:Python Windows写入HEX到BIN到文件

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下失败?

回答

2

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

o=open(current_dir+"\\startup.exe","wb") 
o.write(startupbin) 

特别是在Windows上,在文本作案打开文件会导致换行符被转化为对写平台的本地值,但这对于二进制数据来说不是理想的行为。

open() function documentation

默认是使用文本模式,这可能'\n'字符转换为特定于平台的代表性写作和回读。因此,在打开二进制文件时,应该在模式下追加'b'模式值以二进制模式打开文件,这将提高可移植性。 (追加'b'甚至不把二进制系统文件和文本文件是非常有用的方式不同,它作为文档)。

+0

哎呀,我认为你是对的,在Linux下没有不指定二进制模式失败,我认为这是问题,让我看看。 – bsteo 2013-03-12 14:31:21

+0

是的,你是对的!现在工作! – bsteo 2013-03-12 14:34:06

+0

@xtmtrx:在Linux上,'\ n'是换行符的正确表示形式,因此它们不会在那里转换。 :-) – 2013-03-12 14:34:53