import sys
import os

def hex_txt_to_exe():
    # 1. 检查参数
    if len(sys.argv) < 2:
        print("用法: python txt_to_exe.py <txt文件路径>")
        return

    txt_path = sys.argv[1]

    # 2. 检查文件是否存在
    if not os.path.exists(txt_path):
        print(f"错误: 找不到文件 '{txt_path}'")
        return

    try:
        # 3. 自动生成输出文件名 (例如: test.txt -> test.exe)
        file_base = os.path.splitext(txt_path)[0]
        exe_out_path = f"{file_base}.exe"

        print(f"正在从 {txt_path} 还原程序...")

        # 4. 读取并转换
        with open(txt_path, 'r') as f_in, open(exe_out_path, 'wb') as f_out:
            # 采用分块读取字符串模式，防止超大文本崩溃
            # 每次读取 2MB 的字符（对应 1MB 的二进制数据）
            while hex_chunk := f_in.read(1024 * 1024 * 2):
                # 将十六进制字符串转回字节流
                binary_data = bytes.fromhex(hex_chunk)
                f_out.write(binary_data)

        print("-" * 30)
        print(f"还原成功！")
        print(f"生成文件: {exe_out_path}")

    except ValueError:
        print("错误：TXT 文件中包含非十六进制字符，请确保文件内容纯净。")
    except Exception as e:
        print(f"还原过程中出错: {e}")

if __name__ == "__main__":
    hex_txt_to_exe()