我如何将字符串转换为其字节值?我有一个字符串"hello"
,我想将其更改为类似于"/x68..."
的东西。
Python 2.6及更高版本具有bytearray类型,可能是您要查找的内容。与字符串不同,它是可变的,即您可以 "就地" 改变单个字节,而不必创建整个新字符串。它具有列表和字符串功能的优点。并且它还清楚地表明您正在处理任意字节而不是文本。
list(bytearray("hello"))
- Trevor Rudolphlist(bytearray("hello"))
比 map(ord, "hello")
更快。 - Trevor Rudolph也许你需要这个(Python 2):
>>> map(ord,'hello')
[104, 101, 108, 108, 111]
对于一个 Unicode 字符串,这将返回 Unicode 代码点:>>> map(ord,u'Hello, 马克')
[72, 101, 108, 108, 111, 44, 32, 39532, 20811]
但要对它进行编码以获得该编码的字节值:
>>> map(ord,u'Hello, 马克'.encode('chinese'))
[72, 101, 108, 108, 111, 44, 32, 194, 237, 191, 203]
>>> map(ord,u'Hello, 马克'.encode('utf8'))
[72, 101, 108, 108, 111, 44, 32, 233, 169, 172, 229, 133, 139]
map
不返回一个列表)。 一个字节无法超过0xFF。 此外,非ASCII码的值高于0x7F,而不是0xFF :) - Mark Tolonen如果您想要获取十六进制字符串表示,可以这样做:
"hello".encode("hex") # '68656c6c6f'
为了符合您的参考表示(不要太认真,我猜这并不是您真正想要的):
"".join(["/x%02x" % ord(c) for c in "hello"]) # '/x68/x65/x6c/x6c/x6f'
"hello"
和"\x68\x65\x6C\x6C\x6F"
是相同的(除非你转义反斜杠而不是将它们用于十六进制转义)? - user395760str
类型基本上只是一组字节(这意味着它没有像 Unicode 这样的表示形式,可以是任意序列的字节,尽管它的名称是字符串)。 - mipadistr
是Unicode编码。如果要将它转换为字节,可以使用s.encode()
(也可以指定所需的字符编码,否则默认为UTF-8)。 - Thomas K