一个自创的编码解码算法

[原文]一个自创的编码解码算法

在robotter项目(我们为日本人开发的一个web应用项目)的开发中遇到了字符串编码问题。robotter项目采用了微软silverlight beta版,中文和日文有时候在web服务器与silverlight客户端传输的过程中遇到了乱码问题。就算是url encoding过的东西也会产生乱码。只好自己写一个算法解决。

基本思想,采用64进制来表示数据。这是根据16进制的特点来设计的,因为16进制的表示都是两个英文字母或数字的组合,传输中不会乱码。现在,如果存在足够的数字和英文字母,使得64进制可以被表示,那么所有的数据都可以用这个进制来表示。

动手从ascii码表中选择足够多的字母和数字组合,产生64进制,也就是2的6次方。没有更多的不乱码的字母和数字个数可以达到2的7次方。

// 编码字典

public static readonly string codeDictionary = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz{|";

二进制的6位可以表示64,也就是这个字典可以表示从0 --- 2的6次方 - 1 范围内的任何数。

一、根据上面的理论,每个字节的数据可以被编码成两个字节。

        

每个字节的低6位取出来,以它的值为位置,取出编码字典中的64进制表示符号,而高2位再次编码,这样,一个字节被编码成编码表中数字和英文字母的符号组合。

在实现过程中第二个版本采用了这个编码方法。public static string EncodString2(string rawString)函数和public static string DecodString2(string codingString)函数。

二、在实际应用中发现这种编码有点长。于是改进算法:

                          

按照6位一个编码的思想,把3个字节的原始数据编码成4个字节的64进制代码符号。按照这个思想实现了编码解码的第三个算法版本。public static string EncodString3(string rawString)函数和public static string DecodString3(string codingString)函数。

经过测试,这种编码的长度不足url编码的一半。

付上源代码:(见文章的原始出处)一个自创的编码解码算法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值