python-2.7 - 将十六进制字符串写入二进制文件
问题描述
我正在尝试使用 python 2.7 将十六进制字符串写入文件,以便在使用 HxD 打开时可以检索相同的十六进制值。以下代码适用于多个输入字符串,但当字符串包含“0A”时,写入无法正常工作。
import binascii
s = "0ABD"
f = open("output","w")
f.write(binascii.a2b_hex(s))
f.close()
之后使用 HxD 或在线https://hexed.it/打开文件,您会发现在每个 '0A' 之前添加了 '0D'。我正在使用 vb.net 读取这些生成的文件,但我得到的字节仍然比预期的要多。
解决方案
您正在以文本模式打开文件以进行写入,因此换行符被转换为使用系统约定。在 Windows 的情况下0A
or'\n'
被转换为0D 0A
or '\r\n'
。
来自python 的 open() 文档(添加了重点):
如果省略mode,则默认为 'r'。默认是使用文本模式,它可以
'\n'
在写入时将字符转换为特定于平台的表示,然后在读取时返回。因此,在打开二进制文件时,应附加'b'
到模式值以二进制模式打开文件,这将提高可移植性。
以二进制模式打开文件。
f = open("output", "wb")
推荐阅读
- ios - Xamarin iOS 应用在 iOS 12 模拟器上使用 750 个文件句柄,在 iOS 13 模拟器上仅使用 250 个
- gradle - 如何在 groovy 插件中使用插件
- .net - 将 dotnet core 中的模型类转换为 json
- google-cloud-dataflow - 在 Apache Beam 中添加 2 Dofn 之间的依赖关系
- javascript - 如何让我的 for 循环在 NetSuite 的用户事件脚本中包含最后一行?
- forms - 为什么 Prism 的 Master Detail Page 结构与 Xamarin.Forms 不同?
- python - Python队列只有1个项目
- android - Flutter(或 Dart)的 QR 扫描插件
- cmake - 构建openpose库时Cmake在生成期间抛出错误
- php - 为什么我在 Symfony 5 上使用 DateTime 约束时会收到“这个值应该是字符串类型”?