python - 十六进制字符串到 ASCII 的转换有错误吗?

标签 python python-3.x hex ascii

我正在尝试编写一个 python 脚本来将十六进制字符串转换为 ASCII 并将结果保存到 .der 证书格式的文件中。我可以使用转换插件在 Notepad++ 中执行此操作,但我想找到一种从命令行在 python 脚本中执行此转换的方法,可以通过调用 notepad++ NppConverter 插件或使用 python 模块。

我已经完成了一半,但是我的转换与 notepad++ 中看到的 ASCII 输出不同,下面是 Notepad++ 中输出的片段

enter image description here

但是我的 python 转换显示的输出略有不同

enter image description here

正如您所看到的,我的脚本导致输出中缺少字符,老实说,我不知道为什么某些 block 会用黑色勾勒出来。但这些缺失的 block 需要与第一张图片具有相同的格式。

这是我的基本代码,我正在Python 3中工作,我正在使用反斜杠替换错误控制,因为这是我可以让有问题的十六进制出现在输出文件中的唯一方法

result = bytearray.fromhex('380c2fd6172cd06d1f30').decode('ascii', 'backslashreplace')

text_file = open("C:\Output.der", "w")
text_file.write(result)
text_file.close()

任何指导将不胜感激。

最佳答案

MikG,我想说 python 完全按照你的要求做了。

您告诉我们将字节转换为字符串,并用转义序列设置的最高有效位替换字节(\xFF 字符除外)。

字符\x04 (ETB) 和\x1F (US) 是完全合法的 ASCII 字符(尽管不可打印),并且它们使用其文字值进行编码。

字符\xd6 和\xd0 在 ASCII 中是非法的 - 它们是 8 位长。正如您所要求的,它们使用 4 个字母的长转义序列进行编码:“\”(反斜杠字符)和“xd6”/“xd0”字符串

我不擅长 DER,但假设您希望拥有原始 8 位序列。以下是实现此目的的方法:

result = bytearray.fromhex('380c2fd6172cd06d1f30')

with open("Output.der", "wb") as text_file:
    text_file.write(result)

请注意 open 的“wb”说明符——它告诉 python 执行二进制 IO。

我还用过with语句以确保无论 write 发生什么情况,text_file 都会关闭。

关于python - 十六进制字符串到 ASCII 的转换有错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47775317/

相关文章:

python - 如何将具有多个对象的 pandas 系列转换为字符串系列?

python - 如何为多个Python版本和平台构建编译模块

c++ - 如何将 C++ 数字格式设置为一定的精度?

c# - 如何将 Hex 转换为 RGB?

decimal - 如何将大数转换为十进制?

python - Python C API分配的一些资源是否需要释放

python - 使用正则表达式将每行的第一个字母大写

Python:更改 sys.stdin 的值后如何使用 GNU readline?

python - Sklearn MLPRegressor 中的 RandomGridSearchCV 错误

python-3.x - 如何使用包含 python3 解释器的 virtualenv 打包 pyspark 代码?