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

时间:2017-12-12 14:44:15

标签: python python-3.x hex ascii

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

我在那里,但是我的转换与notepad ++中的ASCII输出不同,下面是Notepad ++中输出的片段

enter image description here

但我的python转换在

下面显示略有不同的输出

enter image description here

正如您所看到的,我的脚本会导致输出中缺少字符,如果我说实话,我不知道为什么某些块会以黑色标出。但是这些丢失的块需要与第一张图片的格式相同。

这是我的基本代码,我在Python 3中工作,我正在使用backslashreplace错误控件,因为这是我可以将有问题的十六进制显示在输出文件中的唯一方法

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

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

非常感谢任何指导。

1 个答案:

答案 0 :(得分:2)

MikG,我会说python正是你所要求的。

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

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

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

我对DER并不擅长,但假设您希望拥有原始的8位序列。以下是如何实现这一目标的:

result = bytearray.fromhex('380c2fd6172cd06d1f30')

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

请注意" wb"说明符open - 它告诉python做二进制IO。

我还使用了with语句来确保text_file在写入时无关紧要。