Python 3.1.1字符串至十六进制

问题描述 投票:63回答:9

我正在尝试使用str.encode(),但我得到了

>>> "hello".encode(hex)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: must be string, not builtin_function_or_method

我尝试了很多变体,它们似乎都可以在Python 2.5.2中工作,所以我需要做些什么才能使它们在Python 3.1中工作?

python string python-3.x hex
9个回答
85
投票

hex编解码器已在3.x中卡住。使用binascii代替:

binascii

23
投票

您已经有了一些不错的答案,但是我认为您可能也对背景知识感兴趣。

首先,您缺少引号。应该是:

>>> binascii.hexlify(b'hello')
b'68656c6c6f'

第二,此编解码器尚未移植到Python 3.1。参见"hello".encode("hex") 。似乎他们尚未决定是否将这些编解码器包含在Python 3中或以其他方式实现。

如果您查看该错误附带的here,则可以看到建议的实现方法:

diff file

18
投票

顺便说一句,binascii方法更容易

import binascii
output = binascii.b2a_hex(input)

希望有帮助。 :)


16
投票

在Python 3.5+中,将字符串编码为字节并使用>>> import binascii >>> x=b'test' >>> x=binascii.hexlify(x) >>> x b'74657374' >>> y=str(x,'ascii') >>> y '74657374' >>> x=binascii.unhexlify(x) >>> x b'test' >>> y=str(x,'ascii') >>> y 'test' 方法,返回一个字符串。

hex()

(可选地,将字符串转换回字节:

s = "hello".encode("utf-8").hex()
s
# '68656c6c6f'

9
投票

在Python 3中,所有字符串都是unicode。通常,如果将unicode对象编码为字符串,则使用b = bytes(s, "utf-8") b # b'68656c6c6f' ,因为.encode('TEXT_ENCODING')不是文本编码,所以应使用hex处理任意编解码器。例如:

codecs.encode()

同样,由于“ hello”是unicode,因此在编码为十六进制之前,需要将其表示为字节字符串。这可能与您最初使用>>>> "hello".encode('hex') LookupError: 'hex' is not a text encoding; use codecs.encode() to handle arbitrary codecs >>>> import codecs >>>> codecs.encode(b"hello", 'hex') b'68656c6c6f' 方法的方式更加一致。

encodebinascii.hexlify之间的区别如下:

  • binascii.hexlify

    二进制数据的十六进制表示。

    返回值是一个字节对象。

    类型:内建函数或方法

  • codecs.encode

    encode(obj,[encoding [,errors]])->对象

    使用注册用于编码的编解码器对obj进行编码。编码默认到默认编码。可能会给出错误以设置其他错误处理方案。默认值为“严格”,这意味着会出现编码错误ValueError。其他可能的值是'ignore','replace'和'xmlcharrefreplace'以及在此注册的任何其他名称可以处理ValueErrors的codecs.register_error。

    类型:内建函数或方法


7
投票

codecs.encodebase64.b16encode在字节之间来回转换字节,并在所有Python版本中工作。 base64.b16encode也可以使用,但是在Python 3中不太直接。


6
投票

在Python 3.5及更高版本中最简单的方法是:

base64.b16decode

如果您使用base64.b16decode字符手动将字符串输入到Python解释器中,则可以通过在字符串之前键入codecs approach来更快地完成此操作:

>>> 'halo'.encode().hex()
'68616c6f'

在Python 2.x中是等效的:

utf-8

3
投票

使用hexlify-b


1
投票

还有另一种方法:

© www.soinside.com 2019 - 2024. All rights reserved.