【问题标题】:How to store Hex and convert Hex to ASCII in Python?如何在 Python 中存储 Hex 并将 Hex 转换为 ASCII?
【发布时间】:2018-08-30 05:53:06
【问题描述】:

我的命令输出类似于0x53 0x48 0x41 0x53 0x48 0x49。现在我需要将其存储为十六进制值,然后将其转换为 ASCII 为SHASHI

我尝试了什么-

  1. 我尝试将十六进制值存储为int("0x31",16),然后使用decode("ascii") 将其解码为ASCII,但没有成功。
  2. "0x31".decode("utf16")这会引发错误AttributeError: 'str' object has no attribute 'decode'

通过Google 找到的其他一些随机编码和解码的东西。但仍然没有运气。

问题:- 我如何以十六进制存储值,如 0x53 0x48 0x41 0x53 0x48 0x49 并将其值转换为 SHASHI 以进行验证。

注意:对 Python 不太友好,所以如果这是一个新手问题,请原谅。

【问题讨论】:

  • 为什么要存储一个十六进制字符串而不是只存储一个整数列表?或者只是一个bytesbytearray,它们已经像一个整数列表。那么你就不需要这些代码了。

标签: python python-3.x type-conversion data-conversion


【解决方案1】:

我不知道这个解决方案是否适合您的问题,但它是一种将 HEX 转换为 ASCII 的好方法。代码sn-p如下:

# Your raw data, the hex input
raw_data = '0x4D6172697573206120636974697420637520707974686F6E21'

# Slice string to remove leading `0x`   
hex_string = raw_data[2:]

# Convert to bytes object.                                          
bytes_object = bytes.fromhex(hex_string) 

# Convert to ASCII representation.                          
ascii_string = bytes_object.decode("ASCII") 

# print the values for comparison
print("\nThe input data is: {} \nwhile the string is: {} \n".format(raw_data,ascii_string))

【讨论】:

    【解决方案2】:
    >>> import binascii
    >>> s = b'SHASHI'
    >>> myWord = binascii.b2a_hex(s)
    >>> myWord
    b'534841534849'
    >>> binascii.a2b_hex(myWord)
    b'SHASHI'
    
    
    >>> bytearray.fromhex("534841534849").decode()
    'SHASHI'
    

    【讨论】:

    • 请补充说明
    【解决方案3】:

    假设你有这个输入:

    s = '0x53 0x48 0x41 0x53 0x48 0x49'

    您可以在列表中存储值,如下所示:

    l = list(map(lambda x: int(x, 16), s.split()))

    要将其转换为 ASCII,请使用 chr():

    res = ''.join(map(chr, l))

    【讨论】:

      【解决方案4】:

      int("0x31", 16) 部分是正确的:

      >>> int("0x31",16)
      49
      

      但要将其转换为字符,您应该改用chr(...) function

      >>> chr(49)
      '1'
      

      将它们放在一起(在第一个字母上):

      >>> chr(int("0x53", 16))
      'S'
      

      并处理整个列表:

      >>> [chr(int(i, 16)) for i in "0x53 0x48 0x41 0x53 0x48 0x49".split()]
      ['S', 'H', 'A', 'S', 'H', 'I']
      

      最后把它变成一个字符串:

      >>> hex_string = "0x53 0x48 0x41 0x53 0x48 0x49"
      >>> ''.join(chr(int(i, 16)) for i in hex_string.split())
      'SHASHI'
      

      我希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 2019-09-13
        • 2021-05-01
        • 2015-12-19
        • 1970-01-01
        • 2015-10-30
        • 2014-09-05
        • 2011-08-09
        • 1970-01-01
        • 2014-08-25
        相关资源
        最近更新 更多