C#压缩字符串

C#压缩字符串,c#,string,compression,C#,String,Compression,假设1个字符是1字节,那么我有10个字符,也就是10个字节 我有一个包含20个字符的句子,我需要将这个句子上传到服务器。限制只有10个字节,我如何压缩这个句子,从20字节压缩到10字节 我是否可以通过C#实现这一点 编辑 我有一个170个字符的句子,我需要把它压缩成130个字符。我正在将这句话上传到第三方服务器,所以我对服务器没有任何控制权。这可以做到吗?好吧,你不能保证做到这一点,不。20字节的序列可能比10字节的序列多得多,因此你不可能将每个20字节的序列可逆地压缩成10字节 一般来说,压缩

假设1个字符是1字节,那么我有10个字符,也就是10个字节

我有一个包含20个字符的句子,我需要将这个句子上传到服务器。限制只有10个字节,我如何压缩这个句子,从20字节压缩到10字节

我是否可以通过C#实现这一点

编辑

我有一个170个字符的句子,我需要把它压缩成130个字符。我正在将这句话上传到第三方服务器,所以我对服务器没有任何控制权。这可以做到吗?

好吧,你不能保证做到这一点,不。20字节的序列可能比10字节的序列多得多,因此你不可能将每个20字节的序列可逆地压缩成10字节

一般来说,压缩在输入长度很小的情况下通常不能很好地工作

如果你知道所有的输入都是(比如)A-Z和空格(即27个字符),那么这就是5位。。。所以总共只需要100位。这仍然比您现有的80位稍多,因此您仍然无法保证表示所有的句子。你可以让“普通”字符比“不寻常”字符短,并让许多句子以这种方式工作


考虑到原始需求的不可能性,在不知道您真正需要实现什么的情况下,很难更加具体。

如果消息是静态的,则将索引传递到包含它可能发送的不同消息的数组中,而不是传递消息。如果它们是动态的,那么除非你可以将自己限制在一个有限的ASCII子集中,并且在一个字节中存储多个字符,否则字符串是不可能的,或者字符串是极其重复的,在这种情况下,你可以考虑。

< P>你不能,压缩比取决于字符串本身的内容。
即使可以压缩序列,也必须在服务器上实现解压缩。但是如果你有权访问服务器,你可以简单地将序列分成许多部分。

你这里有一个严重的问题。20字节等于160位,即2^160条可能的消息。十个字节等于80位是2^80条可能的消息。除非您有办法将源消息空间减少到只包含2^80条可能的消息,否则您不能这样做。

您想要的大部分时间都是可能的,但我可以保证出现问题。如果您使用该类编写了一个方法,它可能会使用您拥有的170字节字符串并减少它。正如大多数人所说,压缩比实际上取决于内容本身

作为测试: 我取了一个“0123456789”字符串,重复17次(170个字符),然后将其压缩为21个字符。
如果我取一个170个零的字符串并gzip它,它会减少到12个字符。 我用了170字节的随机码,它减少到79个字符


因此,在这些情况下,它会压缩它,以适应您的空间需求;但无法预测何时以及多久会发生这种情况。压缩比最终可能为1:1,并且在创建块结构时存在固有的开销,因此它实际上可能导致压缩长度略大于原始长度。同样,您可能需要对整个内容进行base64编码,以便将其正确存储在DB中,这样会进一步增加您的开销。

您究竟为什么被限制为10字节?压缩这么小的东西通常会使结果变大。你能改变服务器上的逻辑吗?你能把它分成10字节一组发送吗?@Kirk我已经编辑了我的问题@Senad不,我不能那样做@Mark不,我必须把这些都寄到一起,(我编辑了上面的问题)@Henk这听起来像是家庭作业吗:S@ille,如果您无法控制服务器,服务器将如何知道如何解压缩文本?我需要做的是压缩170个字符的句子,使其看起来像130个字符的句子。我无法控制服务器。这是一个第三方服务器,我试图发送这个字符串。但是170个字符是什么?请告诉我们整个字母表的大小。输入可以是键盘上的任何东西,还是受到某种限制?A-Z,A-Z,0-9,标点符号和空格,有什么限制?如果我不能通过服务器访问会怎么样。我已经编辑了上面的问题。我需要向服务器发送一个大小较小的字符串。这可能吗?如果我没有弄错的话,运行长度编码需要服务器端处理。但我无法控制服务器