Je veux prendre un entier (qui sera <= 255), à une représentation de chaîne hexadécimale
par exemple: je veux 65
entrer et sortir '\x41'
, ou 255
et obtenir '\xff'
.
J'ai essayé de le faire avec le struct.pack('c',
65 )
, mais cela étouffe tout ce qui précède 9
car il veut prendre une seule chaîne de caractères.
chr
n'implique pas du tout ASCII - il prend simplement un nombre et crée une chaîne d'octets d'un octet où la valeur ordinale de l'octet est le nombre. Les encodages ASCII et ASCII compatibles entrent en jeu lorsque vous écrivez et affichez des bytestrings.'A'
une autre façon d'écrire et d'afficher'\x41'
. Tout ce qui comptestr
vraiment, c'est le fait que ce soit soixante-cinq. Pour rendre les choses compréhensibles et utilisables par les humains, cela devient souvent un A.Cela convertira un entier en une chaîne hexadécimale à 2 chiffres avec le préfixe 0x:
la source
Et alors
hex()
?Si vous voulez vraiment avoir
\
devant vous, vous pouvez faire:la source
repr(chr(255)) # '\xff'
y parvient égalementEssayer:
ou
La documentation Python dit: "gardez ceci sous votre oreiller: http://docs.python.org/library/index.html "
la source
Permettez-moi d'ajouter celui-ci, car parfois vous voulez juste la représentation à un chiffre:
Et maintenant, avec les nouvelles
f''
chaînes de format, vous pouvez faire:la source
Si vous souhaitez emballer une structure avec une valeur <255 (un octet non signé, uint8_t) et vous retrouver avec une chaîne d'un caractère, vous recherchez probablement le format B au lieu de c . C convertit un caractère en chaîne (pas trop utile en soi) tandis que B convertit un entier.
(Et oui, 65 est \ x41, pas \ x65.)
La classe struct gérera également facilement l'endianisme pour la communication ou d'autres utilisations.
la source
Notez que pour les grandes valeurs,
hex()
fonctionne toujours (certaines autres réponses ne le font pas):Python 2:
0x4354467b746f6f5f736d616c6c3f7dL
Python 3:
0x4354467b746f6f5f736d616c6c3f7d
Pour un message RSA déchiffré, on pourrait faire ce qui suit:
la source
Cela a fonctionné le mieux pour moi
Changez le (2) si vous voulez un nombre avec une plus grande largeur (2 est pour 2 caractères imprimés hexadécimaux) donc 3 vous donnera ce qui suit
la source
Je voulais un entier aléatoire converti en une chaîne hexadécimale à six chiffres avec un # au début. Pour l'obtenir, j'ai utilisé
la source
"#%6x" % random.randint(0x0, 0xFFFFFF)
. (Il manque un%
avant6
etrandint
prend 2 paramètres -basses inférieure et supérieure-)Avec
format()
, selon les exemples de format , nous pouvons faire:la source
Par exemple:
la source
Vous pouvez également convertir n'importe quel nombre dans n'importe quelle base en hex. Utilisez ce code d'une ligne ici, il est facile et simple à utiliser:
hex(int(n,x)).replace("0x","")
Vous avez une chaîne
n
qui est votre numéro etx
la base de ce numéro. Tout d'abord, changez-le en entier, puis en hexadécimal, mais hex a0x
au premier de celui-ci donc avecreplace
nous le supprimons.la source
Comme représentation alternative, vous pouvez utiliser
la source