【发布时间】:2013-12-27 13:46:14
【问题描述】:
在多人游戏设置中,我打算在发送之前使用 zlib 压缩较大的字符串。我将生成的数据放回字符串中,这些字符串将使用 TCP 作为字节流发送。
我的问题是,我还需要将控制字符放入字符串中。例如,我需要将原始字符串长度(纯文本)添加到压缩字符串的前面,并使用一些符号将其与压缩数据分开,例如“|”。
但是我找不到知道哪些字节是实际内容以及哪些字节是控制字符的方法。是否有任何字符是 zlib-compressed-string 永远不会包含的(除了 0,我不能使用它,因为它标志着 c-string 的结尾)我可以用来分隔“元数据”和“压缩数据”?
【问题讨论】:
-
为什么需要把长度和剩余数据分开??
-
为什么需要纯文本的长度?使用二进制格式不是更简单吗?
-
把压缩数据的长度放在前面,知道你的数据什么时候结束,什么时候开始一个新的消息类型?
-
我使用了zlib.h中定义的compress和uncompress函数。后者需要一个长度正确的缓冲区来生成原始字符串,为了简单起见,我想将其发送出去。由于我为发送和接收数据而实现的结构当前使用字符串(我需要其他值),因此我想将压缩数据打包成这样的字符串。但如果有更好的方法,我愿意接受建议。 “使用二进制格式”是指始终使用前(两个)字节来包含长度吗?
-
@user1781290,这就是我想做的,是的。但我不知道如何将长度与实际数据分开......