【问题标题】:Python HexadecimalPython 十六进制
【发布时间】:2013-01-18 15:28:01
【问题描述】:

如何将十进制转换为以下格式的十六进制(至少两位,零填充,不带 0x 前缀)?

输入:255 输出:ff

输入:2 输出:02

我尝试了hex(int)[2:],但它似乎显示了第一个示例而不是第二个示例。

【问题讨论】:

标签: python hex


【解决方案1】:

使用format() function'02x' 格式。

>>> format(255, '02x')
'ff'
>>> format(2, '02x')
'02'

02 部分告诉format() 使用至少 2 位数字并使用零填充长度,x 表示小写十六进制。

Format Specification Mini Language 还为您提供 X 用于大写十六进制输出,您可以在字段宽度前加上 # 以包含 0x0X 前缀(取决于您使用的是 x 还是X 作为格式化程序)。只需考虑到您需要调整字段宽度以允许额外的 2 个字符:

>>> format(255, '02X')
'FF'
>>> format(255, '#04x')
'0xff'
>>> format(255, '#04X')
'0XFF'

【讨论】:

  • 我遇到了一个问题,如果将格式设置为使用大写十六进制输出,十六进制前缀将带有大写“X”。在您的示例中似乎并非如此。这只是我本地版本的 Python 的问题吗?我使用的是 2.7.9 版本。
  • @jwp36:不,这是我的回答有误,现在更正了。我很抱歉。
  • 指定输出字符串中的格式'{:02x}'.format(255)
  • @JuanPablo:只能在更大的字符串中这样做。使用str.format() 只是为了让它解析出一个插槽,这会让Python 做额外的工作(因为在内部这仍然使用format(255, '02x') 来处理那个插槽)。
【解决方案2】:

我想这就是你想要的:

>>> def twoDigitHex( number ):
...     return '%02x' % number
... 
>>> twoDigitHex( 2 )
'02'
>>> twoDigitHex( 255 )
'ff'

【讨论】:

    【解决方案3】:

    另一种解决方案是:

    >>> "".join(list(hex(255))[2:])
    'ff'
    

    可能是一个古老的答案,但很实用。

    【讨论】:

    • 与另一个答案相同,这不是零填充。例如,"".join(list(hex(2))[2:]) 的计算结果为 '2',而不是 '02'
    • 这是问题中hex(int)[2:] 的同义词。你为什么要列一个名单只是为了再次加入它?
    • 如果您已经同意有更好的答案,为什么还要发布这个答案?
    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 2023-03-19
    • 2010-12-15
    • 2016-04-17
    • 2011-08-13
    • 2023-04-08
    • 2018-07-26
    • 2011-12-09
    相关资源
    最近更新 更多