2011-05-06 48 views
17

我正在使用Python在嵌入式系统中的内存中的特定位置(32位地址)上编写脚本的某些操作。Python尾随L问题

当我将这些地址转换为字符串,整数和十六进制值时,似乎会出现尾随L.这可以是一个真正的痛苦,例如下面看似无害的代码将无法正常工作:

int(hex(4220963601)) 

或者这样:

int('0xfb96cb11L',16) 

有谁知道如何避免这种情况?

到目前为止,我想出这个方法来去掉尾随大号断弦的,但它似乎并不很优雅:

if longNum[-1] == "L": 
    longNum = longNum[:-1] 
+2

即使没有“L”,您的第一个示例也不起作用,因为int不知道如何处理“0x”前缀。你想达到什么目的? – recursive 2011-05-06 21:33:03

回答

17

如果你做转换使用

"%x" % 4220963601 

既不会有的0x也尾随L为十六进制。

+4

或者'format(4220963601,'x')' – jamylak 2013-06-26 09:52:57

11

调用这些值str()应该省略后面的“ L”。

+8

为了让未来的读者知道,yan在其上调用'str'的回答不起作用,至少在Python 2.7.3中。 Str保留尾随的'L'。 (我没有足够的声望评论颜的答案)使用格式或%x的答案似乎有效。 – Rhadamanthos 2014-01-07 17:33:33

+1

断线间隔,但: Python 2.7.5+(默认,2013年9月19日,13:48:49) [GCC 4.8.1] on linux2 输入“help”,“copyright”,“credits”或“许可证“以获取更多信息。 >>> N = 123L >>> STR(N) '123' >>> STR(123L) '123' – yan 2014-01-07 19:42:19

+0

也就是说例子是在一般真实的,但为十六进制,十六进制不接受它返回一个串字符串L中给出一个整数:'( – Har 2017-04-12 16:25:21

-1

这可以帮助别人:

>>>n=0xaefa5ba7b32881bf7d18d18e17d3961097548d7cL 
>>>print "n=","%0s"%format(n,'x').upper() 
n= AEFA5BA7B32881BF7D18D18E17D3961097548D7C 
+3

这段未评论的代码如何帮助任何人比已经给出的答案更多? – kratenko 2015-04-21 15:22:57

0

这是我做过什么:INT(variable_which_is_printing_as_123L),它为我工作。这将适用于正常整数。