Quiero llevar un número entero (que será <= 255) a una representación de cadena hexadecimal
Por ejemplo: quiero pasar 65y salir '\x41', o 255llegar '\xff'.
He intentado hacer esto con el struct.pack('c',65 ), pero eso se ahoga en todo lo anterior 9ya que quiere incluir una sola cadena de caracteres.

chrno involucra ASCII en absoluto: simplemente toma un número y crea una cadena de bytes de un byte donde el valor ordinal del byte es el número. Las codificaciones ASCII y ASCII compatibles entran en juego al escribir y mostrar cadenas de bytes.'A'otra forma de escribir y mostrar'\x41'. Todo lo questrrealmente le importa es el hecho de que son sesenta y cinco. Para hacer que las cosas sean comprensibles y utilizables por los humanos, a menudo se convierte en una A.Esto convertirá un entero en una cadena hexadecimal de 2 dígitos con el prefijo 0x:
fuente
¿Qué hay de
hex()?Si realmente quieres tener
\al frente puedes hacer:fuente
repr(chr(255)) # '\xff'también logra estoTratar:
o
La documentación de Python dice: "mantén esto debajo de tu almohada: http://docs.python.org/library/index.html "
fuente
Déjame agregar este, porque a veces solo quieres la representación de un solo dígito:
Y ahora con las nuevas
f''cadenas de formato que puede hacer:fuente
Si desea empaquetar una estructura con un valor <255 (un byte sin signo, uint8_t) y terminar con una cadena de un carácter, probablemente esté buscando el formato B en lugar de c . C convierte un carácter en una cadena (no demasiado útil por sí mismo) mientras que B convierte un número entero.
(Y sí, 65 es \ x41, no \ x65.)
La clase struct también manejará convenientemente la resistencia para la comunicación u otros usos.
fuente
Tenga en cuenta que para valores grandes,
hex()aún funciona (algunas otras respuestas no):Python 2:
0x4354467b746f6f5f736d616c6c3f7dLPython 3:
0x4354467b746f6f5f736d616c6c3f7dPara un mensaje RSA descifrado, se podría hacer lo siguiente:
fuente
Esto funcionó mejor para mí
Cambie el (2) si desea un número con un ancho mayor (2 es para 2 caracteres impresos en hexadecimal), de modo que 3 le dará lo siguiente
fuente
Quería un entero aleatorio convertido en una cadena hexadecimal de seis dígitos con un # al principio. Para conseguir esto usé
fuente
"#%6x" % random.randint(0x0, 0xFFFFFF). (Faltan%antes6yrandinttoma 2 parámetros -más bajos y límites superiores-)Con
format(), según los ejemplos de formato , podemos hacer:fuente
Por ejemplo:
fuente
También puede convertir cualquier número en cualquier base a hexadecimal. Use este código de línea aquí, es fácil y simple de usar:
hex(int(n,x)).replace("0x","")Tienes una cadena
nque es tu número yxla base de ese número. Primero, cámbielo a entero y luego a hexadecimal, pero hexadecimal tiene0xal principio, así que con loreplaceeliminamos.fuente
Como una representación alternativa que podría usar
fuente