22

我正在尝试将大整数转换为十六进制,但结果我在开头得到了额外的“0x”,在and处得到了“L”。有什么办法可以去掉它们。谢谢。号码是:

44199528911754184119951207843369973680110397865530452125410391627149413347233422
34022212251821456884124472887618492329254364432818044014624401131830518339656484
40715571509533543461663355144401169142245599341189968078513301836094272490476436
03241723155291875985122856369808620004482511813588136695132933174030714932470268
09981252011612514384959816764532268676171324293234703159707742021429539550603471
00313840833815860718888322205486842202237569406420900108504810

在十六进制我得到:

0x2ef1c78d2b66b31edec83f695809d2f86e5d135fb08f91b865675684e27e16c2faba5fcea548f3
b1f3a4139942584d90f8b2a64f48e698c1321eee4b431d81ae049e11a5aa85ff85adc2c891db9126
1f7f2c1a4d12403688002266798ddd053c2e2670ef2e3a506e41acd8cd346a79c091183febdda3ca
a852ce9ee2e126ca8ac66d3b196567ebd58d615955ed7c17fec5cca53ce1b1d84a323dc03e4fea63
461089e91b29e3834a60020437db8a76ea85ec75b4c07b3829597cfed185a70eeaL
4

6 回答 6

61

是十六进制数字的0x文字表示。最后L意味着它是一个整数。

如果您只想将数字的十六进制表示为不带0xand的字符串L,则可以使用带 . 的字符串格式%x

>>> a = 44199528911754184119951207843369973680110397
>>> hex(a)
'0x1fb62bdc9e54b041e61857943271b44aafb3dL'
>>> b = '%x' % a
>>> b
'1fb62bdc9e54b041e61857943271b44aafb3d'
于 2012-04-18T21:22:21.000 回答
40

当然,继续删除它们。

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

(走这strip()条路,所以如果那些额外的字符碰巧不在那里,它仍然可以工作。)

于 2012-04-18T21:21:54.917 回答
10

与 Praveen 的回答类似,您也可以直接使用内置的format().

>>> a = 44199528911754184119951207843369973680110397
>>> format(a, 'x')
'1fb62bdc9e54b041e61857943271b44aafb3d'
于 2015-07-28T08:16:21.500 回答
2

我认为使用条带是危险的想法。
因为lstrip还是rstrip0

前任)

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

''

结果是'',不是'0'

在您的情况下,您可以简单地使用replace来防止上述情况。
这是示例代码。

hex(bignum).replace("L","").replace("0x","")
于 2019-01-02T12:41:44.330 回答
0

使用接受的答案时要小心,因为它lstrip('0x')还会删除任何前导零,这可能不是您想要的,见下文:

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

如果您确定'0x'前缀将始终存在,则可以简单地删除它,如下所示:

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

[2:]将获取字符串中除前两个字符之外的每个字符。

于 2017-08-31T10:04:19.237 回答
-2

一种更优雅的方式是

hex(_number)[2:-1]

但是如果您使用 gmpy mpz 类型,则必须小心,那么最后不存在“L”,您可以使用

hex(mpz(_number))[2:]
于 2017-11-09T11:00:52.400 回答