【问题标题】:Python Windows write HEX to BIN into filePython Windows 将 HEX 写入 BIN 到文件中
【发布时间】:2013-03-12 14:28:12
【问题描述】:

我有以下脚本,将二进制文件作为 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 下会失败吗?

【问题讨论】:

    标签: python windows python-2.7 binary hex


    【解决方案1】:

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

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

    尤其是在 Windows 上,以文本方式打开文件会导致换行符在写入时被转换为平台原生值,但这对于二进制数据来说是不可取的行为。

    来自open() function documentation:

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

    【讨论】:

    • 哎呀,我觉得你说得对,Linux下不指定二进制模式也不会失败,我觉得是这个问题,让我看看。
    • @xtmtrx:在 Linux 上,\n 是换行符的正确表示,因此它们不会在那里翻译。 :-)
    猜你喜欢
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    相关资源
    最近更新 更多