如何在Python中存储Hex并将Hex转换为ASCII?
How to store Hex and convert Hex to ASCII in Python?
我的命令输出类似于 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不太友好,新手问题还请见谅
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))
我的命令输出类似于 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不太友好,新手问题还请见谅
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))