【问题标题】:python converting hexadecimal binary to stringpython将十六进制二进制转换为字符串
【发布时间】:2017-05-26 17:37:26
【问题描述】:

我正在使用python3.5,我希望将我得到的十六进制字节(b'\x00'b'\x01' 等)的输出写入带有\x00 -> 0\x01 -> 1 的python 字符串,我有这种感觉可以做到轻松且以非常pythonic的方式,但是半小时的谷歌搜索仍然让我认为最简单的方法是手动制作带有映射的字典(我实际上只需要从0到7)。

Input    Intended output
b'\x00'  0 or '0'
b'\x01'  1 or '1'

等等

【问题讨论】:

  • 您的输入和预期输出是什么?
  • b 表示bytes,而不是二进制。 \x00 不是字符串 0 而是带有代码 0 的字符,无法显示,因此 Python 显示其代码。
  • 您对b"\x0F" - "F""15" 有什么期望?

标签: python python-3.x binary hex


【解决方案1】:

不确定你是否想要这个结果,但试试吧

output = [str(ord(x)) for x in output]

【讨论】:

  • 很好,但是\x0F 和类似的会有问题;)
  • 好吧...他说“我实际上只需要从 0 到 7”:)
【解决方案2】:

如果您需要将b"\x0F" 转换为F,请使用

print( hex(ord(b'\x0F'))[2:] )

format()

print( format(ord(b'\x0F'), 'X') )    # '02X' gives string '0F'
print( '{:X}'.format(ord(b'\x0F')) )  # '{:02X}' gives string '0F'

【讨论】:

    【解决方案3】:

    一个字节串自动是一个数字列表。

    input_bytes = b"\x00\x01"
    output_numbers = list(input_bytes)
    

    【讨论】:

      【解决方案4】:

      你只是在寻找这样的东西吗?

      for x in range(0,8):
          (x).to_bytes(1, byteorder='big')
      

      输出是:

      b'\x00'
      b'\x01'
      b'\x02'
      b'\x03'
      b'\x04'
      b'\x05'
      b'\x06'
      b'\x07'
      

      或者反过来:

      byteslist = [b'\x00',
      b'\x01',
      b'\x02',
      b'\x03',
      b'\x04',
      b'\x05',
      b'\x06',
      b'\x07']
      
      for x in byteslist:
          int.from_bytes(x,byteorder='big')
      

      输出:

      0
      1
      2
      3
      4
      5
      6
      7
      

      【讨论】:

        猜你喜欢
        • 2010-11-17
        • 1970-01-01
        • 2023-03-04
        • 2019-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-30
        相关资源
        最近更新 更多