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

请求实现Python十进制数组转二进制压缩文件的逆向编码逻辑

十进制数组转二进制压缩文件实现

先拆解原解码逻辑的规则,再逆向实现编码:

原解码规则回顾:

  • 第一个数据点:用4字节大端有符号整数存储
  • 后续数据点分两种存储方式:
    1. 单字节增量模式:当字节值≠255时,该字节值减127得到增量,加上前一个数据点得到当前值
    2. 5字节直接存储模式:当字节值=255时,后续4字节是小端有符号整数,直接作为当前数据点

对应的编码逻辑实现如下:

def encode_data(data_in):
    if not data_in:
        return b""
    
    byte_out = bytearray()
    
    # 编码第一个点:4字节大端有符号
    first_byte = data_in[0].to_bytes(4, byteorder='big', signed=True)
    byte_out.extend(first_byte)
    
    for i in range(1, len(data_in)):
        prev_val = data_in[i-1]
        curr_val = data_in[i]
        delta = curr_val - prev_val
        
        # 判断使用哪种编码模式
        if -127 <= delta <= 127:
            # 单字节增量模式:delta + 127 转成无符号单字节
            byte_val = delta + 127
            byte_out.append(byte_val)
        else:
            # 5字节直接存储模式:先写标记字节0xFF,再写4字节小端有符号整数
            byte_out.append(255)
            curr_byte = curr_val.to_bytes(4, byteorder='little', signed=True)
            byte_out.extend(curr_byte)
    
    return bytes(byte_out)

# 使用示例
# data = [你的十进制数组]
# binary_result = encode_data(data)
# with open("compressed_data.bin", "wb") as f:
#     f.write(binary_result)

代码说明:

  • 先处理第一个元素,严格按照原解码的逆操作转成4字节大端有符号字节
  • 遍历后续每个元素,计算当前值与前一个值的差值:
    • 若差值在[-127,127]区间内,用单字节模式:差值加127得到0-254的字节值(对应解码时减127还原增量)
    • 差值超出范围时,用5字节模式:先写入标记字节255,再将当前值转成4字节小端有符号字节
  • 最终返回拼接好的二进制字节串,可直接写入文件保存

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 03:51:39