2013-03-12 144 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