如何将字符串转换为字节数组?

Mar*_*tin 21 python

如何将字符串转换为其字节值?我有一个字符串"hello",我想改变是类似的东西"/x68...".

kin*_*all 32

Python 2.6及更高版本有一个bytearray类型,可能是你正在寻找的.与字符串不同,它是可变的,即,您可以"就地"更改单个字节,而不必创建一个全新的字符串.它具有列表和字符串功能的完美组合.它也使你的意图清晰,你正在使用任意字节而不是文本.

  • `名单(字节阵列( "你好"))` (9认同)
  • 我做了一些速度测试和`list(bytearray("hello"))`比`map(ord,"hello")快. (5认同)

Mar*_*nen 28

也许你想要这个(Python 2):

>>> map(ord,'hello')
[104, 101, 108, 108, 111]
Run Code Online (Sandbox Code Playgroud)

对于Unicode字符串,这将返回Unicode代码点:

>>> map(ord,u'Hello, ??')
[72, 101, 108, 108, 111, 44, 32, 39532, 20811]
Run Code Online (Sandbox Code Playgroud)

但编码它以获取编码的字节值:

>>> 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]
Run Code Online (Sandbox Code Playgroud)


bar*_*ddu 13

如果你想获得十六进制字符串表示,你可以这样做:

"hello".encode("hex") # '68656c6c6f'
Run Code Online (Sandbox Code Playgroud)

并且为了满足你的参考表示(不要认真对待,猜猜这不是你真正想要的):

"".join(["/x%02x" % ord(c) for c in "hello"]) # '/x68/x65/x6c/x6c/x6f'
Run Code Online (Sandbox Code Playgroud)