减少字符串中的字符数

时间:2012-08-20 14:14:55

标签: java android algorithm encoding sms

在我正在制作的Android应用中,当输入特定文本时,根据特定算法对其进行编码。然后它应该作为文本消息发送到包含相同应用程序的另一个设备,编码文本可以用于解码。编码和解码部分运行良好,但在编码时,它会产生很长的String。例如,

当文字“Hello World!”时编码,它产生以下字符串:

zN6xdwB8486d6I6I6T1p5B6T7N6I6x2z1reIWPTp

因此,这是一条短信,平均文本会产生一个非常长的String。那么这个编码的String是否可以减少到合理的大小?或者我可以将其作为文本消息发送的任何其他方式(作为序列化Java对象(如果在Android中可能)或其他方式)?

提前致谢。

5 个答案:

答案 0 :(得分:2)

尝试使用Huffman code来压缩数据。

答案 1 :(得分:2)

没有任何通用方法可以将任何字符串减少为字符数较少的字符串。这应该是直观有意义的 - 如果你试图将1,000,000个字符串映射到100,000个字符串上,那么就会有重复。

此外,如果您试图让其他人不知道您发送的数据是什么,则会遇到其他问题 - 您需要做出明智的加密决策。 不要制作自己的加密算法。

因此,我们需要更多信息才能提供任何有用的信息。你会使用可能字符串的子集吗?

答案 2 :(得分:1)

看起来SMS可以携带二进制数据,因此您可能最好使用AES或类似的东西。您可以将其配置为使用静态的IV和密码生成的密钥(另一端的人可以共享)。您可以在发送之前对字符串进行霍夫曼编码,这会使其进一步缩小,可能会将消息的最大长度扩展到140个字符以上。它看起来像这样:

For sending:

input string --> compressed blob --> encrypted blob --> SMS
                                 |
                                  -> known encrypt params 

For receiving:

SMS --> encrypted blob --> compressed blob --> original string
                         |
   known encrypt params -^

您有时可能会绕过压缩步骤。有些字符串不能很好地压缩,并且压缩会产生一些开销,因此在某些情况下,它可能会使字符串变大。

如果加密参数保留在加密的blob中,则加密参数将构成开销。 (算法,IV,填充方案等)。如果您每次都使用其中一组,您只需将它们硬编码到程序中,您就不需要每次都发送它们。

答案 3 :(得分:0)

您可以使用一些小算法来解码您的字符串。

或者你可以像这样实现简单的算法

originalString = "hello";

每个字符+ 1例如:a = b,b = c ....等或

每个字符= 3 ex a = d,b = h ....

encodedString ="ifmmp"

所以字符的数量将是,您将解码字符串

答案 4 :(得分:0)

你有26 + 26 + 10个ASCII字符,需要6位,并且可以转换char(短于2个字节)

字符串“012345678901234567890”使用21个字符或42个字节,可以在2个16个字节的同义long中进行迁移。

但正如@elyashiv所说,使用好的algorythm是更好的方法。

编辑

A-Aa-z0-9是你的字符串的字符:
它们可以在6位

的0-> 61位数字中进行变换

因此您可以将它们添加到长度中,每次<<<<<<<<最后一个字符(第11个)被拆分,并开始第二个字符。

你必须在字节上找到一个transmetter。

如果消息传递需要String字符,则必须使用八进制,并跳过第一个不可打印的字符。所以你可以把7个数字放在一个长的(<<&#7 decal位)。