www org descargar python string python-3.x hex

org - Python 3.1.1 cadena a hex



python 64 bits (9)

Solución 2018:

def StrToHex(string): HEX = "" for x in string:HEX += hex(int(ord(x))) return HEX print (StrToHex("HG"))

Esto convierte cadena a hexadecimal.

Nota: probado con Python 3.6.1

Estoy tratando de usar str.encode() pero obtengo

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

He intentado un montón de variaciones y parece que todas funcionan en Python 2.5.2, entonces, ¿qué debo hacer para que funcionen en Python 3.1?


El códec hex ha sido lanzado en 3.x. Use binascii en binascii lugar:

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


En Python 3, codifique la cadena en bytes y use el método hex() , devolviendo una cadena.

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

Opcionalmente, convierta la cadena a bytes:

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


En Python 3, todas las cadenas son unicode. Por lo general, si codifica un objeto Unicode a una cadena, usa .encode(''TEXT_ENCODING'') , ya que el hex no es una codificación de texto, debe usar codecs.encode() para manejar códecs arbitrarios. Por ejemplo:

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

De nuevo, dado que "hello" es unicode, debe indicarlo como una cadena de bytes antes de codificar en hexadecimal. Esto puede ser más en línea con su enfoque original de usar el método de encode .

Las diferencias entre binascii.hexlify y codecs.encode son las siguientes:

  • binascii.hexlify

    Representación hexadecimal de datos binarios.

    El valor de retorno es un objeto de bytes.

    Tipo: builtin_function_or_method

  • codecs.encode

    codificar (obj, [encoding [, errors]]) -> object

    Codifica obj utilizando el códec registrado para la codificación. la codificación se establece de manera predeterminada en la codificación predeterminada. se pueden dar errores para establecer un esquema de manejo de errores diferente. El valor predeterminado es "estricto", lo que significa que los errores de codificación generan un ValueError. Otros valores posibles son ''ignorar'', ''reemplazar'' y ''xmlcharrefreplace'', así como cualquier otro nombre registrado con codecs.register_error que pueda manejar ValueErrors.

    Tipo: builtin_function_or_method


Los métodos de 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''

Espero eso ayude. :)


Otro método más:

s = ''hello'' h = ''''.join([hex(ord(i)) for i in s]); # outputs: ''0x680x650x6c0x6c0x6f''

Esto básicamente divide la cadena en caracteres, hace la conversión a través de hex(ord(char)) y une los caracteres nuevamente. En caso de que quiera el resultado sin el prefijo 0x , haga lo siguiente:

h = ''''.join([str(hex(ord(i)))[2:4] for i in s]); # outputs: ''68656c6c6f''

Probado con Python 3.5.3.



Ya has obtenido algunas buenas respuestas, pero pensé que también te interesaría un poco de los antecedentes.

En primer lugar, te faltan las citas. Debería ser:

"hello".encode("hex")

En segundo lugar, este códec no se ha portado a Python 3.1. Mira here . Parece que todavía no han decidido si estos códecs deberían incluirse o no en Python 3 o implementarse de otra manera.

Si miras el archivo diff adjunto a ese error, puedes ver el método propuesto para implementarlo:

import binascii output = binascii.b2a_hex(input)