如何在Python中没有额外的'0x'前导和'L'尾随字符的情况下将整数转换为十六进制?

use*_*517 20 python hex

我试图将大整数转换为十六进制,但结果我在开头得到额外的"0x"而在和得到"L".有没有办法删除它们.谢谢.数量是:

44199528911754184119951207843369973680110397865530452125410391627149413347233422
34022212251821456884124472887618492329254364432818044014624401131830518339656484
40715571509533543461663355144401169142245599341189968078513301836094272490476436
03241723155291875985122856369808620004482511813588136695132933174030714932470268
09981252011612514384959816764532268676171324293234703159707742021429539550603471
00313840833815860718888322205486842202237569406420900108504810
Run Code Online (Sandbox Code Playgroud)

在十六进制中我得到:

0x2ef1c78d2b66b31edec83f695809d2f86e5d135fb08f91b865675684e27e16c2faba5fcea548f3
b1f3a4139942584d90f8b2a64f48e698c1321eee4b431d81ae049e11a5aa85ff85adc2c891db9126
1f7f2c1a4d12403688002266798ddd053c2e2670ef2e3a506e41acd8cd346a79c091183febdda3ca
a852ce9ee2e126ca8ac66d3b196567ebd58d615955ed7c17fec5cca53ce1b1d84a323dc03e4fea63
461089e91b29e3834a60020437db8a76ea85ec75b4c07b3829597cfed185a70eeaL
Run Code Online (Sandbox Code Playgroud)

Pra*_*ota 58

0x是十六进制数字的文字表示.而L在结束意味着它是一个整型.

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

>>> a = 44199528911754184119951207843369973680110397
>>> hex(a)
'0x1fb62bdc9e54b041e61857943271b44aafb3dL'
>>> b = '%x' % a
>>> b
'1fb62bdc9e54b041e61857943271b44aafb3d'
Run Code Online (Sandbox Code Playgroud)

  • 或者``{0:x} .format(整数)`使用新式格式.在`x`之前添加`#`以获得'0x`前缀. (13认同)

kin*_*all 41

当然,继续删除它们.

hex(bignum).rstrip("L").lstrip("0x") or "0"
Run Code Online (Sandbox Code Playgroud)

(走了strip()路线,如果那些额外的角色碰巧不在那里,它仍然可以工作.)

  • 我建议下面亚历克斯的答案是最好的。只需格式化(bignum,'x')。去除前导零没有问题,总而言之,它比新样式字符串格式更简单。 (2认同)

Ale*_*lex 6

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

>>> a = 44199528911754184119951207843369973680110397
>>> format(a, 'x')
'1fb62bdc9e54b041e61857943271b44aafb3d'
Run Code Online (Sandbox Code Playgroud)