请求实现Python十进制数组转二进制压缩文件的逆向编码逻辑
十进制数组转二进制压缩文件实现
先拆解原解码逻辑的规则,再逆向实现编码:
原解码规则回顾:
- 第一个数据点:用4字节大端有符号整数存储
- 后续数据点分两种存储方式:
- 单字节增量模式:当字节值≠255时,该字节值减127得到增量,加上前一个数据点得到当前值
- 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
相关产品推荐
相关产品推荐

