Python 3.1.1string到hex

我想使用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中工作?

hex编解码器已经被3.x. 改用binascii

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

你已经有了一些很好的答案,但是我认为你也可能对这个背景有点兴趣。

首先,你错过了报价。 它应该是:

 "hello".encode("hex") 

其次,这个编解码器还没有被移植到Python 3.1。 看到这里 。 看来,他们还没有决定这些编解码器是否应该包含在Python 3中,或者以不同的方式实现。

如果您查看附加到该错误的diff文件 ,您可以看到实现它的build议方法:

 import binascii output = binascii.b2a_hex(input) 

binascii方法顺便说一下

 >>> 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' 

希望能帮助到你。 🙂

base64.b16encodebase64.b16decode将字节转换为hex数据,并且可以跨越所有Python版本。 编解码器的方法也可以,但在Python 3中并不那么简单。

在Python 3中,所有string都是unicode。 通常,如果将unicode对象编码为string,则使用.encode('TEXT_ENCODING') ,因为hex不是文本编码,所以应该使用codecs.encode()来处理任意编解码器。 例如:

 >>>> "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' 

同样,由于“hello”是unicode,所以在编码为hex之前,您需要将其指定为一个字节string。 这可能会更符合您使用encode方法的原始方法。

binascii.hexlifycodecs.encode的区别如下:

  • binascii.hexlify

    二进制数据的hex表示。

    返回值是一个字节对象。

    types:builtin_function_or_method

  • codecs.encode

    encode(obj,[encoding [,errors]]) – > object

    使用为编码注册的编解码器编码obj。 编码默认为默认编码。 可能会给出错误来设置不同的error handlingscheme。 缺省值是'strict',这意味着编码错误会引发ValueError。 其他可能的值是'ignore','replace'和'xmlcharrefreplace'以及其他可以处理ValueErrors的用codecs.register_error注册的名字。

    types:builtin_function_or_method

在Python 3中,将string编码为字节,并使用hex()方法返回一个string。

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

可以select将string转换回字节:

 b = bytes(s, "utf-8") b # b'68656c6c6f'