Quiero llevar un número entero (que será <= 255) a una representación de cadena hexadecimal
Por ejemplo: quiero pasar 65
y salir '\x41'
, o 255
llegar '\xff'
.
He intentado hacer esto con el struct.pack('c',
65 )
, pero eso se ahoga en todo lo anterior 9
ya que quiere incluir una sola cadena de caracteres.
chr
no 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 questr
realmente 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:
0x4354467b746f6f5f736d616c6c3f7dL
Python 3:
0x4354467b746f6f5f736d616c6c3f7d
Para 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%
antes6
yrandint
toma 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
n
que es tu número yx
la base de ese número. Primero, cámbielo a entero y luego a hexadecimal, pero hexadecimal tiene0x
al principio, así que con loreplace
eliminamos.fuente
Como una representación alternativa que podría usar
fuente