"""编解码工具模块支持 HEX / GB2312 / UTF-8 之间的转换"""import binasciiimport refrom core.constants import EncodeModedef encode_data(text: str, mode: EncodeMode) -> bytes:"""将输入文本按指定模式编码为字节数据:param text: 输入文本:param mode: 编码模式:return: 编码后的字节数据"""if mode == EncodeMode.HEX:return _hex_to_bytes(text)elif mode == EncodeMode.GB2312:return text.encode('gb2312', errors='replace')elif mode == EncodeMode.UTF8:return text.encode('utf-8', errors='replace')else:raise ValueError(f"不支持的编码模式: {mode}")def decode_data(data: bytes, mode: EncodeMode) -> str:"""将接收到的字节数据按指定模式解码为显示文本:param data: 字节数据:param mode: 解码模式:return: 解码后的显示文本"""if not data:return ""if mode == EncodeMode.HEX:return _bytes_to_hex(data)elif mode == EncodeMode.GB2312:try:return data.decode('gb2312', errors='replace')except Exception:return data.decode('gb2312', errors='replace')elif mode == EncodeMode.UTF8:try:return data.decode('utf-8', errors='replace')except Exception:return data.decode('utf-8', errors='replace')else:raise ValueError(f"不支持的解码模式: {mode}")def _hex_to_bytes(hex_str: str) -> bytes:"""将十六进制字符串转为字节,支持空格/逗号/无分隔符例如: "01 02 AB" / "01,02,AB" / "0102AB""""# 去除空格、逗号、0x前缀等cleaned = re.sub(r'[,\s]', '', hex_str)# 去除 0x 前缀cleaned = re.sub(r'0x', '', cleaned, flags=re.IGNORECASE)if not cleaned:raise ValueError("HEX 字符串为空")if len(cleaned) % 2 != 0:raise ValueError(f"HEX 字符长度必须为偶数: {cleaned}")try:return binascii.unhexlify(cleaned)except binascii.Error as e:raise ValueError(f"HEX 解析错误: {e}")def _bytes_to_hex(data: bytes) -> str:"""将字节数据转为空格分隔的大写十六进制字符串"""return ' '.join(f'{b:02X}' for b in data)def validate_hex_string(hex_str: str) -> tuple:"""校验 HEX 字符串是否合法:return: (is_valid, error_msg)"""if not hex_str.strip():return False, "输入为空"cleaned = re.sub(r'[,\s]', '', hex_str)cleaned = re.sub(r'0x', '', cleaned, flags=re.IGNORECASE)if not cleaned:return False, "输入为空"if len(cleaned) % 2 != 0:return False, "HEX 字符长度必须为偶数(每个字节由两个十六进制字符表示)"if not re.match(r'^[0-9A-Fa-f]+$', cleaned):return False, "包含非法字符,只允许 0-9, A-F"return True, ""
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。