You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python从含十六进制值的混合数据中提取字符串

混合十六进制与字符串内容的数据集提取字符串的Python实现

以下针对两种常见的数据集存储场景给出对应实现:

场景1:数据集元素为字符串类型,混合普通可读字符串与十六进制编码串

该场景下部分元素是十六进制编码的字符串(例如"48656c6c6f"对应"Hello"、带前缀的"0x707974686f6e"对应"python"),部分是直接可读的普通字符串。
实现代码:

def extract_str_from_mixed_str(mixed_item: str, encoding: str = "utf-8") -> str:
    # 清洗十六进制串的多余格式:移除首尾空格、小写、去掉0x前缀
    cleaned_item = mixed_item.strip().lower().removeprefix("0x")
    # 校验是否为合法十六进制串:长度为偶数,所有字符均为十六进制字符
    if len(cleaned_item) % 2 == 0 and all(c in "0123456789abcdef" for c in cleaned_item):
        try:
            # 十六进制转字节后解码为目标字符串
            return bytes.fromhex(cleaned_item).decode(encoding)
        except UnicodeDecodeError:
            # 解码失败说明不是有效字符串的十六进制编码,返回原内容
            return mixed_item
    # 非十六进制串直接返回原内容
    return mixed_item

# 调用示例
dataset = ["48656c6c6f", "普通字符串", "0x707974686f6e", "6874747073"]
processed_dataset = [extract_str_from_mixed_str(item) for item in dataset]
print(processed_dataset)
# 输出:['Hello', '普通字符串', 'python', 'https']

注:如果你的十六进制内容使用非UTF-8编码(比如GBK、Latin-1),修改encoding参数即可

场景2:数据集为原始bytes二进制流,混合可打印字符串与十六进制字节

该场景下你拿到的是二进制数据(例如从日志文件、网络抓包、二进制文件读取的内容),需要从中提取所有连续的可打印字符串。
实现代码:

import string

def extract_str_from_bytes(raw_bytes: bytes, min_str_length: int = 4) -> list[str]:
    # 定义可打印字符集合
    printable = set(bytes(string.printable, "ascii"))
    current_str = []
    result = []
    for b in raw_bytes:
        if b in printable:
            current_str.append(chr(b))
        else:
            # 遇到不可打印字符时,判断当前累计的字符串长度是否符合要求
            if len(current_str) >= min_str_length:
                result.append("".join(current_str))
            current_str = []
    # 处理数据流末尾剩余的可打印字符
    if len(current_str) >= min_str_length:
        result.append("".join(current_str))
    return result

# 调用示例
raw_data = b"\x00\x01Hello\x02\x03World\x04\x00test123\x05\x06"
extracted_strs = extract_str_from_bytes(raw_data)
print(extracted_strs)
# 输出:['Hello', 'World', 'test123']

注:min_str_length参数用于过滤过短的零散可打印字符,可根据需求调整

内容的提问来源于stack exchange,提问作者Iqrar Ijaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 07:51:01