import io
import zipfile


def do_compress(str_hex:str)->str:
    """文字列の16進数をバイナリ値にそのまま変換し、zip圧縮して返す

    Args:
        str_hex (str): 16進数の文字列(先頭にbはない)

    Returns:
        str: zip圧縮したバイナリ値を16進数にした文字列
    """
    # 16進数文字列をそのままバイナリ化
    b = bytes.fromhex(str_hex)
    
    # バイナリをzip化
    zip_stream = io.BytesIO()
    with zipfile.ZipFile(zip_stream, 'w', compression=zipfile.ZIP_DEFLATED) as new_zip:
        new_zip.writestr('_', b)
    
    # zipしたバイナリ値をそのまま取得
    h = zip_stream.getvalue()

    # 16進数にして返す
    return h.hex()