You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python 2.7.2写入十六进制值异常,求原因解析

问题根源与解决方案

这个问题的核心在于Python 2.7在Windows XP下默认的文件写入模式是文本模式,它会自动对字节序列进行编码转换,而非直接写入原始二进制数据。

具体原因分析

在Python 2.7环境中:

  • 你定义的test1 = "\xdd\xba\x01\x10"struct.pack生成的test2本质都是字节串(str类型)。
  • 当你用默认的open(filename, "w")打开文件时,Windows会调用系统默认的ANSI编码(通常是cp1252)处理这些字节。\xdd\xba这组字节会被文本模式的编码逻辑错误解析或转换,最终导致原始字节被篡改,出现你看到的\x77a这类异常值。

正确的解决方法

你需要用二进制写入模式打开文件,这样Python会直接写入原始字节,不会进行任何编码转换:

import struct

# 用二进制模式打开文件,确保字节原样写入
with open("your_target_file.bin", "wb") as f:
    test1 = "\xdd\xba\x01\x10"
    f.write(test1)
    
    test2 = struct.pack("<I", 0x1001badd)
    f.write(test2)

使用"wb"模式(write binary)就能彻底避免字节被篡改的问题,是处理二进制数据的标准做法。

为什么你的临时修复能生效

你添加空格再替换的操作,相当于把\xdd\xba用空格(\x20)分隔开,避免了它们被文本模式的编码逻辑当成连续的、需要转换的字节序列,从而侥幸绕过了编码转换的问题。但这只是临时的权宜之计,二进制写入才是根本解决办法。

内容的提问来源于stack exchange,提问作者2808

火山引擎 最新活动