我的命令输出类似于0x53 0x48 0x41 0x53 0x48 0x49
。现在我需要将其存储为十六进制值,然后将其转换为ASCII SHASHI
。
我尝试了什么 -
int("0x31",16)
,然后使用decode("ascii")
将其解码为ASCII,但没有运气。"0x31".decode("utf16")
这会引发错误AttributeError: 'str' object has no attribute 'decode'
其他一些随机编码和解码通过Google
找到的东西。但仍然没有运气。
问题: - 如何将值存储在十六进制中,如0x53 0x48 0x41 0x53 0x48 0x49
,并将其值转换为SHASHI
进行验证。
注意:Python不太友好,所以请原谅这是否是一个新手问题。
答案 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))