【问题标题】:Python Trailing L ProblemPython尾随L问题
【发布时间】:2011-05-06 21:28:51
【问题描述】:

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

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

int(hex(4220963601))

或者这个:

int('0xfb96cb11L',16)

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

到目前为止,我已经想出了这种方法来去除字符串的尾随 L,但它似乎不是很优雅:

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

【问题讨论】:

  • 您的第一个示例即使没有“L”也无法工作,因为int 不知道如何处理“0x”前缀。你想完成什么?

标签: python


【解决方案1】:

如果您使用

转换为十六进制
 "%x" % 4220963601

既没有0x,也没有尾随的L

【讨论】:

    【解决方案2】:

    对这些值调用 str() 应省略尾随的“L”。

    【讨论】:

    • 只是为了让未来的读者知道,yan 调用 'str' 的答案是行不通的,至少在 Python 2.7.3 中是这样。 Str 保留尾随的“L”。 (我没有足够的声誉来评论 Yan 的答案)使用 format 或 %x 的答案似乎确实有效。
    • 间隔断开,但是: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'
    • 这个例子通常是正确的,但是对于十六进制,十六进制不接受字符串它返回一个带有 L 的字符串,给定一个整数:'(
    【解决方案3】:

    考虑使用rstrip。例如:

    result.rstrip("L")
    

    【讨论】:

      【解决方案4】:

      这就是我所做的: int(variable_which_is_printing_as_123L) 它对我有用。这适用于普通整数。

      【讨论】:

        【解决方案5】:

        这可以帮助某人:

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

        【讨论】:

        • 这段未注释的代码对任何人的帮助超过了已经给出的答案?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-11
        • 2018-11-06
        • 1970-01-01
        • 1970-01-01
        • 2018-03-06
        • 2020-08-22
        • 2010-09-14
        相关资源
        最近更新 更多