在Python中将字符串中的所有字符转换为ASCII十六进制

9

我正在寻找可以在Python中将普通字符串(所有英文字母)中的所有字符转换为ASCII十六进制的Python代码。我不确定我是否用错了方式,因为我一直在搜索,但似乎找不到这个。

我可能只是忽略了答案,但我希望得到一些帮助。

只是为了澄清,从'Hello'到'\ x48 \ x65 \ x6c \ x6c'

5个回答

7
我想''.join(r'\x{02:x}'.format(ord(c)) for c in mystring)可以解决问题...
>>> mystring = "Hello World"
>>> print ''.join(r'\x{02:x}'.format(ord(c)) for c in mystring)
\x48\x65\x6c\x6c\x6f\x20\x57\x6f\x72\x6c\x64

非常感谢!天啊,我爱stackoverflow! - Echocage
顺便问一下,有没有办法在Python版本< 2.6上实现这个? - Echocage
2
我认为''.join([r'\x%x'%ord(c) for c in mystring])至少可以在Python2.4中运行(无论何时引入了列表推导式)——而且从性能的角度来看,与Cpython中的生成器表达式相比,连接列表推导式总是更好的选择……因此,使用它并没有什么坏处,除了有点丑陋。 - mgilson
确实如此先生!我非常感谢您的帮助,作为 Python 的新手,这些帮助对我来说真的很有价值! - Echocage
3
很抱歉,原回答和评论都是不正确的。你的十六进制格式说明符应该是 %02x 或 {0:02x},否则,字符的序数值小于16时,将会生成无效的 \x 转义序列,因为只有一个十六进制数字! - RufusVS

6

基于Jon Clements的答案,尝试在Python 3.7上运行这些代码。我遇到了以下错误:

>>> s = '1234'    
>>> hexlify(s)    
Traceback (most recent call last):    
  File "<pyshell#13>", line 1, in <module>    
    hexlify(s)    
TypeError: a bytes-like object is required, not 'str'

以下代码解决了问题:

>>> str = '1234'.encode()    
>>> hexlify(str).decode()   
'31323334'

5

Something like:

>>> s = '123456'
>>> from binascii import hexlify
>>> hexlify(s)
'313233343536'

不错的解决方案。我认为这是最佳答案。 - SuB

3

尝试:

" ".join([hex(ord(x)) for x in myString])

这似乎快要工作了,这似乎适用于版本<2.6,这很好。你可以得到'0x48 0x65 0x6c 0x6c'而不是'\x48\x65\x6c\x6c'修复工作已经接近完成,但如果有人有解决方法,我很想看看。 - Echocage

1

从Python 3.5开始,您可以使用hex方法将字符串转换为十六进制值(结果为字符串):

str = '1234'
str.encode().hex()
# '31323334'

知道还有另一种解决方法:

str = '1234'
hexed = str.encode().hex()
hex_values = [hexed[i:i+2] for i in range(0, len(hexed), 2)] # every 2 chars
delim = r'\x'

res = delim + delim.join(hex_values)
print(res)
# '\x31\x32\x33\x34'

注意: 如果您将字符串定义为字节,则可以省略encode()方法:str = b'1234'


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