Как преобразовать целое число в шестнадцатеричное без дополнительных "0x" ведущих и "L" конечных символов в Python?

Я пытаюсь преобразовать большое целое число в шестнадцатеричное, но в результате я получаю дополнительные "0x" в начале и "L" в и. Есть ли способ удалить их. Благодарю. Число:

44199528911754184119951207843369973680110397865530452125410391627149413347233422
34022212251821456884124472887618492329254364432818044014624401131830518339656484
40715571509533543461663355144401169142245599341189968078513301836094272490476436
03241723155291875985122856369808620004482511813588136695132933174030714932470268
09981252011612514384959816764532268676171324293234703159707742021429539550603471
00313840833815860718888322205486842202237569406420900108504810

В шестнадцатеричном я получаю:

0x2ef1c78d2b66b31edec83f695809d2f86e5d135fb08f91b865675684e27e16c2faba5fcea548f3
b1f3a4139942584d90f8b2a64f48e698c1321eee4b431d81ae049e11a5aa85ff85adc2c891db9126
1f7f2c1a4d12403688002266798ddd053c2e2670ef2e3a506e41acd8cd346a79c091183febdda3ca
a852ce9ee2e126ca8ac66d3b196567ebd58d615955ed7c17fec5cca53ce1b1d84a323dc03e4fea63
461089e91b29e3834a60020437db8a76ea85ec75b4c07b3829597cfed185a70eeaL

Ответы

Ответ 1

Конечно, идите и удалите их.

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

(Пошел маршрут strip(), так что он все равно будет работать, если эти дополнительные символы не будут там.)

Ответ 2

0x - это буквальное представление шестнадцатеричных чисел. И L в конце означает, что это длинное целое число.

Если вам просто нужно шестнадцатеричное представление числа в виде строки без 0x и L, вы можете использовать форматирование строк с помощью %x.

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

Ответ 3

Как и в случае с ответом Правеена, вы также можете напрямую использовать встроенный format().

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

Ответ 4

Будьте внимательны при использовании принятого ответа, так как lstrip('0x') также удалит все ведущие нули, которые могут быть не такими, как вы хотите, см. ниже:

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

Если вы уверены, что префикс '0x' всегда будет там, его можно удалить просто следующим образом:

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

[2:] получит каждый символ в строке, за исключением первых двух.

Ответ 5

Более элегантный способ -

hex(_number)[2:-1]

но вы должны быть осторожны, если работаете с типами gmpy mpz, то "L" не существует в конце, и вы можете просто использовать

hex(mpz(_number))[2:]