如何在Python中存储Hex并将Hex转换为ASCII?

How to store Hex and convert Hex to ASCII in Python?

我的命令输出类似于 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不太友好,新手问题还请见谅

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'

希望对您有所帮助!

假设你有这样的输入:

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

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

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

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

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

>>> import binascii
>>> s = b'SHASHI'
>>> myWord = binascii.b2a_hex(s)
>>> myWord
b'534841534849'
>>> binascii.a2b_hex(myWord)
b'SHASHI'


>>> bytearray.fromhex("534841534849").decode()
'SHASHI'

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

# 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))