306 votes

Comment convertir un int en une chaîne hexagonale ?

Je veux transformer un nombre entier (qui sera <= 255), en une représentation sous forme de chaîne hexagonale.

Par exemple : Je veux passer dans 65 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 est au-dessus 9 puisqu'il veut prendre une chaîne de caractères unique.

287voto

Mike Graham Points 22480

Vous êtes à la recherche de la chr fonction.

Vous semblez mélanger des représentations décimales d'entiers et des représentations hexagonales d'entiers, donc ce dont vous avez besoin n'est pas tout à fait clair. Sur la base de la description que vous avez donnée, je pense que l'un de ces extraits montre ce que vous voulez.

>>> chr(0x65) == '\x65'
True

>>> hex(65)
'0x41'
>>> chr(65) == '\x41'
True

Notez que cela est très différent de une chaîne de caractères contenant un nombre entier en hexadécimal . Si c'est ce que vous voulez, utilisez l'option hex builtin.

2 votes

Je pensais que chr convertissait les entiers en ascii. Dans ce cas, chr(65) = 'A'. Est-ce un nouvel ajout ?

2 votes

@diedthreetimes, chr n'implique pas du tout l'ASCII - il prend simplement un nombre et crée un bytestring d'un octet où la valeur ordinale de l'octet est le nombre. L'ASCII et les codages compatibles avec l'ASCII entrent en jeu lorsque vous écrivez et affichez des bytestrings.

1 votes

@diedthreetimes, Par exemple, ils entrent en faisant 'A' une autre façon d'écrire et d'afficher '\x41' . Tous les sites str se soucie vraiment du fait que c'est soixante-cinq. Pour rendre les choses compréhensibles et utilisables par les humains, il devient souvent un A.

158voto

Greg Bray Points 3352

Cela convertira un nombre entier en une chaîne hexagonale à deux chiffres avec le préfixe 0x :

strHex = "0x%0.2X" % 255

2 votes

Je suggère de modifier le code ici et de le changer en ceci : strHex = "0x%0.2X" % integerVariable. (Je n'ai pas été capable d'éditer moi-même).

93voto

Felix Kling Points 247451

Qu'en est-il hex() ?

hex(255)  # 0xff

Si vous voulez vraiment avoir \ devant vous pouvez faire :

print '\\' + hex(255)[1:]

1 votes

repr(chr(255)) # '\xff' permet également d'atteindre cet objectif

51voto

Dawid Fatyga Points 2308

Essayez :

"0x%x" % 255 # => 0xff

ou

"0x%X" % 255 # => 0xFF

La documentation Python dit : "Gardez ceci sous votre oreiller : http://docs.python.org/library/index.html "

0 votes

"%#x" % 255 :)

13voto

XTL Points 484

Si vous voulez empaqueter un struct avec une valeur <255 (un octet non signé, uint8_t) et obtenir une chaîne de caractères d'un caractère, vous recherchez probablement la fonction format B au lieu de c . C convertit un caractère en une chaîne de caractères (pas trop utile en soi) tandis que B convertit un nombre entier.

struct.pack('B', 65)

(Et oui, 65 est \x41 pas \x65. )

La classe struct permet également de gérer de manière pratique l'endianness pour la communication ou d'autres utilisations.

0 votes

Le temps qu'il m'a fallu pour trouver struct.pack('B', <integer>) est stupéfiant. Merci.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X