bin_data = binascii.unhexlify(hex_str) binascii.Error: Odd-length string
时间: 2023-09-10 12:07:59 浏览: 353
这个错误表示输入的十六进制字符串的长度不是偶数,因为十六进制字符串中每两个字符表示一个字节,所以长度必须是偶数。你需要检查一下输入的十六进制字符串,确保其长度是偶数。如果长度不是偶数,可以在字符串的前面补0,使其长度为偶数。以下是Python代码示例:
```python
import binascii
hex_str = "v2_0a2c6fab8e5c40c5ff29c62e8369bff2193e0a3a0d46ee23c2fb59abecd8e46454e79431362cc97e0065e5e7fb0a1a490a3cab28f979ecbbc508bfe02f7db3d55ae780372e9598e729639589c7f9cc12e4c1794bf433d0e842af11aba67ce5df50ca3e9d211ce22d284d2d73fa4110acbeb20d18e5ade4c9012201039a98a679"
if len(hex_str) % 2 != 0:
hex_str = "0" + hex_str
bin_data = binascii.unhexlify(hex_str)
str_data = bin_data.decode("utf-8")
print(str_data)
```
在这个示例中,我添加了一个判断语句,如果输入的十六进制字符串的长度是奇数,就在字符串的前面添加一个0,使其长度变为偶数。然后再使用unhexlify()和decode()函数进行解码。
相关问题
bin_data = binascii.unhexlify(hex_str) binascii.Error: Non-hexadecimal digit found
这个错误表示输入的字符串中包含了非十六进制的字符。在使用unhexlify()函数将十六进制字符串转换为二进制数据时,只能包含0-9、A-F和a-f这些字符,如果包含其他字符就会报错。
需要检查一下输入的字符串,确保其只包含十六进制字符,如果有其他字符可以尝试去掉或者替换成十六进制字符。以下是一个Python代码示例,用于检查输入的字符串是否只包含十六进制字符:
```python
import re
hex_str = "v2_0a2c6fab8e5c40c5ff29c62e8369bff2193e0a3a0d46ee23c2fb59abecd8e46454e79431362cc97e0065e5e7fb0a1a490a3cab28f979ecbbc508bfe02f7db3d55ae780372e9598e729639589c7f9cc12e4c1794bf433d0e842af11aba67ce5df50ca3e9d211ce22d284d2d73fa4110acbeb20d18e5ade4c9012201039a98a679"
if re.fullmatch(r"[0-9a-fA-F]+", hex_str):
print("Input string contains only hexadecimal digits")
else:
print("Input string contains non-hexadecimal digits")
```
这个示例中,我使用了正则表达式来判断输入的字符串是否只包含十六进制字符,如果是则输出“Input string contains only hexadecimal digits”,否则输出“Input string contains non-hexadecimal digits”。
import binasciiif item.text(0) == "Raw(原始数据)": for name, value in layer.fields.items(): if str(name) == "load": try: binary_bytes = binascii.unhexlify(value) decoded_str = binary_bytes.decode('utf-8') print(hexdump(value, dump=True)) print(decoded_str) self.ui.Binary_text.setText(hexdump(value, dump=True)) except binascii.Error: print("Invalid hexadecimal string") 代码中layer是packet的数据包,运行报错:binary_bytes = binascii.unhexlify(value) binascii.Error: Non-hexadecimal digit found。请问报错的原因是什么以及如何修改可以使value的值转换成可以看懂的字符串?请给出详细代码
这个错误通常是因为 value 不是有效的十六进制字符串,无法使用 `binascii.unhexlify()` 转换为字节码。你可以添加一个简单的验证来检查值是否是有效的十六进制字符串,例如:
```python
import re
hex_regex = re.compile(r'^[0-9a-fA-F]+$')
if item.text(0) == "Raw(原始数据)":
for name, value in layer.fields.items():
if str(name) == "load" and hex_regex.match(value):
try:
binary_bytes = binascii.unhexlify(value)
decoded_str = binary_bytes.decode('utf-8')
print(hexdump(value, dump=True))
print(decoded_str)
self.ui.Binary_text.setText(hexdump(value, dump=True))
except binascii.Error:
print("Invalid hexadecimal string")
```
这里我们使用了正则表达式来检查值是否是有效的十六进制字符串。如果值无效,就不会尝试将其转换为字节码。
阅读全文