Python struct.pack相关代码转换为C#的实现方法咨询
Python第二行代码含义解释
struct.pack('B' * len(file_data), *file_data[::-1])的逻辑拆解如下:
'B' * len(file_data):是struct模块的格式描述串,B代表单字节无符号整数类型,重复N次(N等于你读取到的文件字节总长度),声明后续需要传入N个独立的字节参数进行打包file_data[::-1]:Python切片语法,作用是把整个file_data字节数组完全倒序反转*:是Python的序列解包符,把反转后的字节数组里的每一个元素拆成独立的位置参数,传入struct.pack函数
整行代码的实际效果就是将原始读取的字节数组整体反转顺序,等价于直接写file_data = file_data[::-1],用struct.pack属于冗余实现。
C# 对应实现
你只需要调用内置的数组反转方法即可完成完全相同的操作:
// 已将文件读取到byte[] fileData的前提下 Array.Reverse(fileData);
后续流程补充说明
- zlib解压可直接使用C#官方内置的
System.IO.Compression.ZLibStream类实现,和Python的zlib.decompress效果一致 - 需注意:
pickle是Python专属的序列化协议,C#没有原生支持的反序列化API,你需要根据原Python代码序列化的tuple结构手动解析,或使用第三方pickle兼容处理库,同时注意指定编码为Windows-1251。
内容的提问来源于stack exchange,提问作者CruleD
相关产品推荐
相关产品推荐

