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的值转换成可以看懂的字符串?请给出详细代码
时间: 2024-01-10 18:02:58 浏览: 168
这个错误通常是因为 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")
```
这里我们使用了正则表达式来检查值是否是有效的十六进制字符串。如果值无效,就不会尝试将其转换为字节码。
阅读全文