【问题标题】:Python , Printing Hex removes first 0?Python,打印十六进制删除第一个 0?
【发布时间】:2013-03-30 20:44:21
【问题描述】:

看看这个:

fc = '0x'
for i in b[0x15c:0x15f]:
    fc += hex(ord(i))[2:]

假设这段代码找到了十六进制 00 04 0f ,而不是这样写,它删除了第一个 0 ,并写成: 04f 有什么帮助吗?

【问题讨论】:

    标签: python hex


    【解决方案1】:
    print ["0x%02x"%ord(i) for i in b[0x15c:0x15f]]
    

    使用格式字符串 "%2x" 告诉它格式化为 2 个字符宽,同样"%02x" 告诉它用 0 填充

    请注意,这仍然会从具有超过 2 个十六进制值的事物中删除前导 0 例如:"0x%02x"%0x0055 => "0x55"

    【讨论】:

      【解决方案2】:

      为了您的方便,它仍然只是一个图形表示。
      该值实际上并没有从数据中删除,它只是在视觉上缩短了。

      这里有完整的描述以及它为什么或为什么它不重要:Why are hexadecimal numbers prefixed with 0x?

      【讨论】:

      • 不,它已从数据中删除,我尝试打印输出,它给出了不同的值,04f 与 00040f 相差太多
      【解决方案3】:

      这是因为hex() 不会包含任何前导零,例如:

      >>> hex(15)[2:]
      'f'
      

      为确保始终获得两个字符,您可以在必要时使用str.zfill() 添加前导零:

      >>> hex(15)[2:].zfill(2)
      '0f'
      

      这是您的代码中的样子:

      fc = '0x'
      for i in b[0x15c:0x15f]:
          fc += hex(ord(i))[2:].zfill(2)
      

      【讨论】:

      • ` for i in b[0x15c:0x15f]: h = hex(ord(i))[2:] if len(h) != 2: h = '0'+h fc + = h;` 一位朋友告诉我这会起作用
      • 最后,一个正确解释的工作示例!
      • 我不会说它被正确解释,我也不是最好的解释。它忽略了前导零,因为它们对十六进制值的十进制值没有任何意义。它们指示值占用的字节数。 15 = f。 0f = 15 因为 0 + 15 是 15
      【解决方案4】:
      >>> map("{:02x}".format, (10, 13, 15))
      ['0a', '0d', '0f']
      

      【讨论】:

      • 这比最受好评的答案更 Pythonic! +1!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      • 1970-01-01
      • 1970-01-01
      • 2020-05-14
      相关资源
      最近更新 更多