web-dev-qa-db-fra.com

Comment convertir un entier en hexadécimal sans les caractères '0x' supplémentaires et les caractères de fin 'L' en Python?

J'essaye de convertir un grand nombre entier en hexadécimal, mais je reçois un extra "0x" au début et un "L" au et. Est-il possible de les supprimer? Merci . Le numéro est:

44199528911754184119951207843369973680110397865530452125410391627149413347233422
34022212251821456884124472887618492329254364432818044014624401131830518339656484
40715571509533543461663355144401169142245599341189968078513301836094272490476436
03241723155291875985122856369808620004482511813588136695132933174030714932470268
09981252011612514384959816764532268676171324293234703159707742021429539550603471
00313840833815860718888322205486842202237569406420900108504810

Dans l'hex, je reçois:

0x2ef1c78d2b66b31edec83f695809d2f86e5d135fb08f91b865675684e27e16c2faba5fcea548f3
b1f3a4139942584d90f8b2a64f48e698c1321eee4b431d81ae049e11a5aa85ff85adc2c891db9126
1f7f2c1a4d12403688002266798ddd053c2e2670ef2e3a506e41acd8cd346a79c091183febdda3ca
a852ce9ee2e126ca8ac66d3b196567ebd58d615955ed7c17fec5cca53ce1b1d84a323dc03e4fea63
461089e91b29e3834a60020437db8a76ea85ec75b4c07b3829597cfed185a70eeaL
16
user1047517

Bien sûr, allez-y et retirez-les.

hex(bignum).rstrip("L").lstrip("0x") or "0"

(Nous avons emprunté la route strip() pour que cela fonctionne quand même si ces caractères supplémentaires ne sont pas là.)

35
kindall

Le 0x est une représentation littérale des nombres hexadécimaux. Et L à la fin signifie que c'est un long entier.

Si vous souhaitez simplement une représentation hexadécimale du nombre sous forme de chaîne sans 0x et L, vous pouvez utiliser le formatage de chaîne avec %x.

>>> a = 44199528911754184119951207843369973680110397
>>> hex(a)
'0x1fb62bdc9e54b041e61857943271b44aafb3dL'
>>> b = '%x' % a
>>> b
'1fb62bdc9e54b041e61857943271b44aafb3d'
56
Praveen Gollakota

Semblable à la réponse de Praveen, vous pouvez également utiliser directement format().

>>> a = 44199528911754184119951207843369973680110397
>>> format(a, 'x')
'1fb62bdc9e54b041e61857943271b44aafb3d'
6
Alex

Je pense que c'est une idée dangereuse d'utiliser des bandes.
car lstrip ou rstrip strip 0

ex) 

a = '0x0'
a.lstrip('0x')  

''

le résultat est '', pas '0'

Dans votre cas, vous pouvez simplement utiliser replce pour éviter la situation ci-dessus.
Voici un exemple de code. 

hex(bignum).replace("L","").replace("0x","")
0
Jiwon

Soyez prudent lorsque vous utilisez la réponse acceptée en tant que lstrip('0x') supprimera également les zéros non significatifs, ce qui peut ne pas être ce que vous voulez, voir ci-dessous:

>>> account = '0x000067'
>>> account.lstrip('0x')
'67'
>>>

Si vous êtes sûr que le préfixe '0x' sera toujours présent, vous pouvez le supprimer simplement comme suit:

>>> hex(42)
'0x2a'
>>> hex(42)[2:]
'2a'
>>>

[2:] obtiendra tous les caractères de la chaîne sauf les deux premiers.

0
mattvick