Python Windows将HEX写入BIN到文件中

时间:2013-03-12 14:28:12

标签: python windows python-2.7 binary hex

我有以下脚本将二进制文件作为HEX保存到变量中并将其作为二进制文件转储到文件中,所有工作在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下失败了吗?

1 个答案:

答案 0 :(得分:2)

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

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

特别是在Windows上,以文本模式打开文件会导致在写入时将换行符转换为平台本机值,但这对于二进制数据来说并不是理想的行为。

来自open() function documentation

  

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