2012-04-18 23 views
15

Estoy tratando de convertir un número entero grande a hexadecimal, pero en el resultado consigo "0x" al principio y "L" en el y. ¿Hay alguna forma de eliminarlos? Gracias. El número es:¿Cómo convertir un entero a hexadecimal sin los caracteres adicionales '0x' iniciales y 'L' en Python?

44199528911754184119951207843369973680110397865530452125410391627149413347233422 
34022212251821456884124472887618492329254364432818044014624401131830518339656484 
40715571509533543461663355144401169142245599341189968078513301836094272490476436 
03241723155291875985122856369808620004482511813588136695132933174030714932470268 
09981252011612514384959816764532268676171324293234703159707742021429539550603471 
00313840833815860718888322205486842202237569406420900108504810 

En hexagonal me sale:

0x2ef1c78d2b66b31edec83f695809d2f86e5d135fb08f91b865675684e27e16c2faba5fcea548f3 
b1f3a4139942584d90f8b2a64f48e698c1321eee4b431d81ae049e11a5aa85ff85adc2c891db9126 
1f7f2c1a4d12403688002266798ddd053c2e2670ef2e3a506e41acd8cd346a79c091183febdda3ca 
a852ce9ee2e126ca8ac66d3b196567ebd58d615955ed7c17fec5cca53ce1b1d84a323dc03e4fea63 
461089e91b29e3834a60020437db8a76ea85ec75b4c07b3829597cfed185a70eeaL 
+0

0x única pregunta: https://stackoverflow.com/questions/16414559/trying-to-use-hex-without-0x/16414614#16414614 –

Respuesta

32

Claro, adelante y eliminarlos.

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

(Fui la ruta strip() por lo que todavía va a trabajar si esos caracteres adicionales pasan a no estar allí.)

54

El 0x es una representación literal de números hexadecimales. Y L al final significa que es entero entero.

Si solo desea una representación hexadecimal del número como una cadena sin 0x y L, puede usar el formato de cadena con %x.

>>> a = 44199528911754184119951207843369973680110397 
>>> hex(a) 
'0x1fb62bdc9e54b041e61857943271b44aafb3dL' 
>>> b = '%x' % a 
>>> b 
'1fb62bdc9e54b041e61857943271b44aafb3d' 
+12

O '{0: x} .formato (entero) 'utilizando el formato de estilo nuevo. Agregue un '#' antes de la 'x' para obtener un prefijo' 0x'. – agf

+0

Sí, creo que esa es en realidad la mejor respuesta. – kindall

5

Similar a la respuesta de Praveen, también puede utilizar directamente incorporado en format().

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

Tenga cuidado al usar la respuesta aceptada como lstrip('0x') también eliminará los ceros, que pueden no ser lo que quiere, ver más abajo:

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

Si está seguro de que el '0x' prefijo siempre estará ahí, se puede quitar simplemente de la siguiente manera:

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

[2:] conseguirá cada carácter de la cadena a excepción de los dos primeros.

-2

una forma más elegante sería

hex(_number)[2:-1] 

pero hay que tener cuidado si se trabaja con tipos MPZ gmpy, entonces la 'L' no existe al final y que sólo puede utilizar

hex(mpz(_number))[2:] 
Cuestiones relacionadas