我正在尝试编写将接受任何长度的十六进制(字节)为ASCII文本的转换器。这个在线作品很棒
https://www.rapidtables.com/convert/number/hex-to-ascii.html
但是,当我尝试执行以下操作时:
binascii.unhexlify(data).decode('utf8')
它的
给我错误:奇数长度的字符串。或binascii.a2b_hex(data[:8])
(找到非十六进制数字)
是的,我已经尝试过strip()
,但它仍然给出此错误
import binascii
text ="""
20 74 61 73 6B 3A 20 50 6C 75 6E 67 65 72 20 67 6F 74 20 73 74 61 74 65 3A 20 33 0A 53 59 53 20 54 69 6D 65 3A 20 32 31 38 2C 20 74 61 73 6B 3A 20 4F 63 63 6C 75 73 69 6F 6E 20 67 6F 74 20 73 74 61 74 65 3A 20 33 0A 53 59 53 20 54 69 6D 65 3A 20 32 31 38 2C 20 74 61 73 6B 3A 20 43 6C 61 6D 70 20 67 6F 74 20 73 74 61 74 65 3A 20 33 0A 53 59 53 20 54 69 6D 65 3A 20 32 31 39 2C 20 74 61 73 6B 3A 20 4D 65 64 69 61 20 67 6F 74 20 73 74 61 74 65 3A 20 33 0A 53 59 53 20 54 69 6D 65 3A 20 32 31 39 2C 20 74 61 73 6B 3A 20 4D 65 64 69 61 45 6E 67 69 6E 65 20 67 6F 74 20 73 74 61 74 65 3A 20 33 0A 53 59 53 20 54 69 6D 65 3A 20 32 34 33 2C 20 74 61 73 6B 3A 20 49 6E 66 75 73 69 6F 6E 45 6E 67 69 6E 65 20 67 6F 74 20 73 74 61 74 65 3A 20 33 0A 53 59 53 20 54 69 6D 65 3A 20 32 34 36 2C 20 74 61 73 6B 3A 20 43 6F 6D 6D 61 6E 64 20 67 6F 74 20 73 74 9F 60 02 06 00 D6 94 04 00 00
"""
new = binascii.a2b_hex(text.strip())
print(new)
所以我试图像这样逐个字符地将其转换为字符,但是我无法将这些代码转换为文本...
import binascii
file = "secret.bin"
decoded = []
with open(file, "rb") as file:
data = file.read()
hex_list = data.split(" ")
ascii_data = [ binascii.b2a_hex(i) for i in hex_list]
print(ascii_data)
答案 0 :(得分:1)
您可以通过删除Odd-length string
中的空格来消除text
错误:
import binascii
text = """\
20 74 61 73 6B 3A 20 50 6C 75 6E 67 65 72 20 67 6F 74 20 73 74 61 74 65 3A 20 33 0A 53 59 53 20 54 69 6D 65 3A 20 32 31 38 2C 20 74 61 73 6B 3A 20 4F 63 63 6C 75 73 69 6F 6E 20 67 6F 74 20 73 74 61 74 65 3A 20 33 0A 53 59 53 20 54 69 6D 65 3A 20 32 31 38 2C 20 74 61 73 6B 3A 20 43 6C 61 6D 70 20 67 6F 74 20 73 74 61 74 65 3A 20 33 0A 53 59 53 20 54 69 6D 65 3A 20 32 31 39 2C 20 74 61 73 6B 3A 20 4D 65 64 69 61 20 67 6F 74 20 73 74 61 74 65 3A 20 33 0A 53 59 53 20 54 69 6D 65 3A 20 32 31 39 2C 20 74 61 73 6B 3A 20 4D 65 64 69 61 45 6E 67 69 6E 65 20 67 6F 74 20 73 74 61 74 65 3A 20 33 0A 53 59 53 20 54 69 6D 65 3A 20 32 34 33 2C 20 74 61 73 6B 3A 20 49 6E 66 75 73 69 6F 6E 45 6E 67 69 6E 65 20 67 6F 74 20 73 74 61 74 65 3A 20 33 0A 53 59 53 20 54 69 6D 65 3A 20 32 34 36 2C 20 74 61 73 6B 3A 20 43 6F 6D 6D 61 6E 64 20 67 6F 74 20 73 74 9F 60 02 06 00 D6 94 04 00 00\
"""
new = binascii.a2b_hex(text.replace(' ',''))
print(new)
此外,由于您在三行中没有使用text
定义了\
变量,因此您在十六进制字符串中得到了一个\n
,这就是您获得Non-hexadecimal digit found
的原因错误。在行尾使用\
或在一行上定义文本。