跳至内容
DST-MOD
用户工具
注册
登录
站点工具
搜索
工具
显示页面
修订记录
反向链接
最近更改
媒体管理器
网站地图
注册
登录
>
最近更改
媒体管理器
网站地图
您的足迹:
•
背水一战
06mod教程区:高级技巧:字符串压缩和解压
本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。
饥荒的 TheSim:QueryServer() 函数可以向服务器传输数据,使用 TheSim:ZipAndEncodeString() 先对数据进行压缩,可减少传输需要的数据量。 服务器如何解析 TheSim:ZipAndEncodeString() 的返回值呢? 以下是一个 python3 解析示例: <code python> from base64 import b64decode, b64encode import zlib import struct import logging logger = logging.getLogger(__name__) def unzipstring(s): ''' 解压字符串, 等价于 TheSim:DecodeAndUnzipString() ''' try: return unzipstring_implement(s) except Exception as e: logger.info("Failed in `unzipstring`: {}".format(e)) return None def unzipstring_implement(s): b = b64decode(s) assert len(b) >= 16 len_str, len_compressed = struct.unpack("<II", b[8:16]) data = b[16:] assert len(data) == len_compressed s = zlib.decompress(data) assert len(s) == len_str return s.decode("utf-8") </code> 可以看出,饥荒在压缩字符串时,是先进行了一次zlib压缩,然后转换为base64格式。 所以,我们在解析的时候,先解析base64,然后进行zlib解压,就能得到原始字符串了。
06mod教程区/高级技巧/字符串压缩和解压.txt
· 最后更改: 2022/06/19 19:48 (外部编辑)
页面工具
显示页面
修订记录
反向链接
回到顶部