131 votes

Comment utiliser hex() sans 0x en Python ?

El hex() en python, met les caractères de tête 0x devant le numéro. Y a-t-il un moyen de lui dire de ne pas les mettre ? Donc 0xfa230 sera fa230 .

Le code est le suivant

import fileinput
f = open('hexa', 'w')
for line in fileinput.input(['pattern0.txt']):
   f.write(hex(int(line)))
   f.write('\n')

6voto

Amin Shah Gilani Points 1450

Cordes F

Python 3 chaînes littérales formatées (f-strings) prennent en charge le Mini-langage de spécification de format qui désigne x pour les nombres hexadécimaux. La sortie ne comprend pas 0x .

Donc tu peux faire ça :

>>> f"{3735928559:x}"
'deadbeef'

Voir la spécification pour d'autres bases comme le binaire, l'octal, etc.

Editar: str.removeprefix

Depuis Python 3.9, il existe désormais une fonction str.removeprefix qui vous permet d'écrire le code suivant, plus évident :

>>> hexadecimal = hex(3735928559)
>>> hexadecimal.removeprefix('0x')
'deadbeef'

Non pas que cela ne fonctionne PAS pour les nombres négatifs :

>>> negadecimal = hex(-3735928559)
>>> negadecimal.removeprefix('0x')
'-0xdeadbeef'

5voto

Maciej Bledkowski Points 317

'x' - Donne le nombre en base 16, en utilisant minuscule des lettres pour les chiffres supérieurs à 9.

>>> format(3735928559, 'x')
'deadbeef'

'X' - Donne le nombre en base 16, en utilisant majuscule des lettres pour les chiffres supérieurs à 9.

>>> format(3735928559, 'X')
'DEADBEEF'

Vous trouverez de plus amples informations à ce sujet dans la documentation de Python :

-1voto

Austin Patton Points 23

Bien que toutes les réponses précédentes fonctionnent, beaucoup d'entre elles ont des réserves comme le fait de ne pas pouvoir gérer les nombres positifs et négatifs ou de ne fonctionner qu'avec Python 2 ou 3. La version ci-dessous fonctionne à la fois dans Python 2 et 3 et pour les nombres positifs et négatifs :

Puisque Python renvoie une chaîne de valeurs hexadécimales à partir de hex(), nous pouvons utiliser string.replace pour supprimer les caractères 0x quelle que soit leur position dans la chaîne (ce qui est important puisque cela diffère pour les nombres positifs et négatifs).

hexValue = hexValue.replace('0x','')

EDIT : wjandrea a fait remarquer que l'implémentation ci-dessus ne gère pas les valeurs qui contiennent 0X au lieu de 0x, ce qui peut se produire dans les littéraux int. En gardant ce cas d'utilisation à l'esprit, vous pouvez utiliser l'implémentation insensible à la casse suivante pour Python 2 et 3 :

import re
hexValue = re.sub('0x', '', hexValue, flags=re.IGNORECASE)

-3voto

Baxromov Points 27

De décimal à hexadécimal, ça a marché

hex(number).lstrip("0x").rstrip("L")

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