without uuid4 convertir binascii binario python encoding python-3.x hex

uuid4 - string to hex python



¿Cómo usar la codificación ''hex'' en Python 3.2 o superior? (4)

En Python 2, para obtener una representación de cadena de los dígitos hexadecimales en una cadena, podrías hacer

>>> ''/x12/x34/x56/x78''.encode(''hex'') ''12345678''

En Python 3, eso ya no funciona (probado en Python 3.2 y 3.3):

>>> ''/x12/x34/x56/x78''.encode(''hex'') Traceback (most recent call last): File "<stdin>", line 1, in <module> LookupError: unknown encoding: hex

Hay al menos una respuesta aquí en SO que menciona que el códec hex se ha eliminado en Python 3. Pero luego, según los documentos , se reintrodujo en Python 3.2, como una "asignación de bytes a bytes".

Sin embargo, no sé cómo hacer que funcionen estas "asignaciones de bytes a bytes":

>>> b''/x12''.encode(''hex'') Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: ''bytes'' object has no attribute ''encode''

Y los documentos tampoco mencionan eso (al menos no donde yo miraba). Debo estar perdiendo algo simple, pero no puedo ver lo que es.


Otra forma más usando binascii.hexlify() :

>>> import binascii >>> binascii.hexlify(b''/x12/x34/x56/x78'') b''12345678''


Utilizando base64.b16encode() :

>>> import base64 >>> base64.b16encode(b''/x12/x34/x56/x78'') b''12345678''


binascii métodos binascii son más fáciles por cierto:

>>> 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_codec pasar por el módulo de codecs y el códec hex_codec (o su alias hex si está disponible * ):

codecs.encode(b''/x12'', ''hex_codec'')

* De la documentación: "Modificado en la versión 3.4: Restauración de los alias para las transformaciones binarias" .