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

时间:2018-03-21 07:49:32

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

我的命令输出类似于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'
  3. 其他一些随机编码和解码通过Google找到的东西。但仍然没有运气。

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

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

4 个答案:

答案 0 :(得分: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'

我希望这有帮助!

答案 1 :(得分:1)

假设您有此输入:

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

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

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

转换为ASCII,请使用chr()

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

答案 2 :(得分:1)

>>> 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 :(得分:0)

我不知道此解决方案是否适合您的问题,但这是将 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))