【问题标题】:Convert hex string to characters in python3在python3中将十六进制字符串转换为字符
【发布时间】:2021-06-24 08:58:00
【问题描述】:

我需要将5555555547aa 等字符串转换为字符串(即�GUUUU)。我有一个在 python2 中工作的函数,它在下面发布,但我无法在 python3 中正常工作。我该怎么做?

    def hex_conv(hex_str):
      arr = [hex_str[i:i+2] for i in range(0, len(hex_str), 2)]
      rev = arr[::-1]
      out_str = ""
      for i in rev:
        print(i)
        out_str += ("\\x" + i).decode("string_escape")
      return out_str

更清楚我需要输出的内容(在 Python2 中):

print('\xaa\x47\x55\x55\x55\x55')

我试过了

print(bytes.fromhex("5555555547aa")[::-1].decode("utf-8", errors="replace"))

这不太行。它似乎产生相同的输出,但实际字节不同。

注意:此输出将通过管道传输到另一个程序(用于二进制利用),因此需要准确打印字节。

【问题讨论】:

  • 这能回答你的问题吗? hexadecimal string to byte array in python
  • 不完全。这只是将它转换为一个字节数组,它本身仍然有 \xaa 而不是 ....
  • 如果你想要一个带有错误字符的常规 str,然后执行 .decode("utf8", errors="replace")
  • 这看起来非常接近,但非常正确。当我需要 0x5555555547aa 时,这似乎会产生十六进制 0x5555555547bdbfef
  • 等等,binexp?只需将其保留为字节串,您可以将字节串发送到子进程或 pwntools 或您正在使用的任何东西。

标签: python python-3.x hex


【解决方案1】:

您只需结合 2 个步骤:使用 bytes.fromhex 从十六进制转换为字节串,并使用 sys.stdout.buffer.write 将字节串打印到标准输出。把它们放在一起:

import sys
sys.stdout.buffer.write(bytes.fromhex("5555555547aa")[::-1])

来自hexadecimal string to byte array in pythonHow to write a raw hex byte to stdout in Python 3?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    • 2013-02-07
    • 2022-07-22
    • 1970-01-01
    • 2018-01-26
    • 2014-12-04
    • 1970-01-01
    相关资源
    最近更新 更多