Python中将十六进制字符串转换为字符

15

我有一个十六进制字符串:

data = "437c2123"
我希望将此字符串转换为符合ASCII表的字符序列。 结果应该像这样:
data_con = "C|!#"

有人能告诉我怎么做吗?


1
如果这是一个Python问题,为什么要引用C代码?你到目前为止尝试了什么? - unwind
1
这是哪种类型的Python? :D - jamylak
1
在您的编辑之后,情况变得更好了,您可以停止关闭投票了。 - jamylak
哦,那么他是否真的想要Python还没有决定,我们可能永远不会知道。 - jamylak
4个回答

38

在Python2中

>>> "437c2123".decode('hex')
'C|!#'

在Python3中(对于Python2也适用,但是<2.6版本不能在字符串前加b前缀)

>>> import binascii
>>> binascii.unhexlify(b"437c2123")
b'C|!#'

20
In [17]: data = "437c2123"

In [18]: ''.join(chr(int(data[i:i+2], 16)) for i in range(0, len(data), 2))
Out[18]: 'C|!#'

这里:

  • for i in range(0, len(data), 2) 遍历 data 中每个第二个位置:024 等。
  • data[i:i+2] 查看每一对十六进制数字 '43''7c' 等。
  • chr(int(..., 16)) 将十六进制数字对转换为相应的字符。
  • ''.join(...) 将字符合并为单个字符串。

如果数据为"aabbccdd",即十六进制转ASCII不可见字符,我该怎么办?它能够正确存储字符吗?我不需要打印字符串,但希望它能够正确存储值。谢谢。 - Alice

-1

自 Python 2.6 开始,您可以使用简单的:

data_con = bytes.fromhex(data)

-3

ord函数将字符转换为数字值,而chr函数则执行相反的操作。因此,要将97转换为"a",请执行ord(97)


“False”和你的回答不够完整,不能被视为一个答案。“ord”函数不接受整数参数。 - jamylak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接