【问题标题】:How can I format an integer to a two digit hex?如何将整数格式化为两位数的十六进制?
【发布时间】:2012-07-25 11:40:14
【问题描述】:

有谁知道如何在输出始终为两位数的情况下将字符转换为十六进制?

例如,如果我的转换产生 0x1,我需要将其转换为 0x01,因为我正在连接一个长的十六进制字符串。

我使用的代码是:

hexStr += hex(ord(byteStr[i]))[2:]

【问题讨论】:

    标签: python


    【解决方案1】:

    您可以为此目的使用字符串格式:

    >>> "0x{:02x}".format(13)
    '0x0d'
    
    >>> "0x{:02x}".format(131)
    '0x83'
    

    编辑:您的代码表明您正在尝试将字符串转换为十六进制字符串表示形式。有一种更简单的方法可以做到这一点(Python2.x):

    >>> "abcd".encode("hex")
    '61626364'
    

    另一种方法(也适用于 Python 3.x)是函数 binascii.hexlify()

    【讨论】:

    • 谢谢。这行得通,只是我必须从一开始就删除 0x,因为我想要的只是之后的部分。
    • 另请注意,如果您想要 0x0D 与 0x0d 使用格式字符串中的 X 与 x,即 "0x{:02X}".format(13)
    • "0x{:02x}".format(239557639) 结果'0xe475c07' 错误
    【解决方案2】:

    可以使用格式化功能:

    >>> format(10, '02x')
    '0a'
    

    您不需要删除 0x 部分(就像您对 [2:] 所做的那样)

    【讨论】:

    • 谢谢。这是个好主意。但是,我无法让它工作,因为我的输出是一个字符串,这似乎只适用于整数。我对python很陌生。有没有办法解决这个问题?
    • 字符串可以通过以下方式转换为整数 format(string("10"), '02x')
    【解决方案3】:
    htmlColor = "#%02X%02X%02X" % (red, green, blue)
    

    【讨论】:

      【解决方案4】:

      如果您使用的是 python 3.6 或更高版本,您也可以使用 fstrings:

      v = 10
      s = f"0x{v:02x}"
      print(s)
      

      输出:

      0x0a
      

      大括号部分的语法与string.format() 相同,但您使用变量名。有关更多信息,请参阅https://www.python.org/dev/peps/pep-0498/

      【讨论】:

        【解决方案5】:

        标准模块binascii也可能是答案,即当你需要转换更长的字符串时:

        >>> import binascii
        >>> binascii.hexlify('abc\n')
        '6162630a'
        

        【讨论】:

          【解决方案6】:

          使用format而不是使用十六进制函数:

          >>> mychar = ord('a')
          >>> hexstring = '%.2X' % mychar
          

          您还可以将数字“2”更改为所需的位数,将“X”更改为“x”以在十六进制字母数字的大小写表示之间进行选择。

          很多人认为这是 Python 中旧的 % 样式格式,但我喜欢它,因为格式字符串语法与其他语言(如 C 和 Java)使用的相同。

          【讨论】:

            【解决方案7】:

            最简单的方法(我认为)是:

            your_str = '0x%02X' % 10
            print(your_str)
            

            将打印:

            0x0A
            

            % 后面的数字将在字符串中转换为十六进制,我认为这样很清楚,来自 C 背景的人(比如我)感觉更像家

            【讨论】:

            • 我会注意到使用 your_str = '0x%02X,' % 10 的输出中有一个逗号。 0x0A,
            • 没错,我一定是从我正在工作的一些代码中复制了它,并且没有很好地清理它。谢谢你的收获。
            • 我发现这个例子很有用,因为我想要一个逗号 :)
            猜你喜欢
            • 2011-08-05
            • 1970-01-01
            • 2021-09-29
            • 2015-03-17
            • 1970-01-01
            • 2012-01-31
            • 2013-09-04
            • 2010-10-16
            相关资源
            最近更新 更多