职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 2460|回复: 3

关于纯数字的字符串按ASCII压缩

[复制链接]
走就走吧 发表于 2011-9-4 09:36 | 显示全部楼层 |阅读模式
Html代码  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  
<HTML>  
<HEAD>  
  <TITLE> New Document </TITLE>  
  <META NAME="Generator" CONTENT="EditPlus">  
  <META NAME="Author" CONTENT="">  
  <META NAME="Keywords" CONTENT="">  
  <META NAME="Description" CONTENT="">  
  <SCRIPT LANGUAGE="JavaScript">  
      
    //压缩前字符串   
    var _former = "23475439057468947233475094759027569027589720954764597063576037856975607458673087620720457634895768495764895638963470634706945769485762";   
    //var _former = "2330248";   
   
    /**   
     * 压缩算法,分别取出两个数字转换成ASCII码,如果字符个数为奇数时,返回最后一位的负数值   
     * @param _former  : 准备压缩的字符串   
     * @return _arr :     压缩后的数组   
     * @auth  方小洲   
     */   
    function _doZip(_former){   
           
        //定义数组、数组长度   
        var _arr = [] ;   
        var _len = 0 ;   
  
           
        //循环取出两个数字   
        for(var i = 0 ; i < _former.length - 1 ; ii=i+2){   
            var _tmp = String.fromCharCode(_former.substring(i,i+2));   
            _arr[_len++] = _tmp ;   
        }   
  
        //如果字符个数为奇数时,返回最后一位的负数值   
        if(_former.length  % 2 == 1){   
            _arr[_len++] = "-"+_former.charAt(_former.length-1);   
        }   
   
        return _arr ;   
    }   
      
      
    /**   
     * 压缩算法,分别取出两个数字转换成ASCII码,如果字符个数为奇数时,返回最后一位的负数值   
     * @param  _arr  : 准备解压的数组   
     * @return _latter : 解压后的字符串   
     * @auth  方小洲   
     */   
    function _doUnZip(_arr){   
  
        //定义数组、数组长度   
        var _brr = [] ;   
        var _len = 0 ;   
           
        //循环取出每个字符,把ASCII转换成数字   
        for(var i = 0 ; i < _arr.length -1 ; i++){   
            var _tmp = _arr[i].charCodeAt(0);     
            if(parseInt(_tmp) < 10 ){   
                _tmp = "0" + _tmp ;   
            }   
            _brr[_len++] = _tmp ;   
        }   
  
  
        //取出数组的最后一个元素   
        var _theLast = _arr[_arr.length - 1];   
  
        //如果长度大于1,表示为负数,返回其绝对值就可以了   
        if(_theLast.length > 1)  {   
            var _tmp = parseInt(_theLast);   
            _tmp = Math.abs(_tmp);   
            _brr[_len++] = _tmp ;   
        }else {   
        //表示正常压缩,按原来的解压   
            var _tmp = _theLast.charCodeAt(0);     
            if(parseInt(_tmp) < 10 ){   
                _tmp = "0" + _tmp ;   
            }   
            _brr[_len++] = _tmp ;   
        }   
        
  
        //把数组转换为字符串   
        var _latter = _brr.join('');   
        return _latter ;   
    }   
      
    /**   
     * 把数组变成字符串   
     * @param _arr  : 数组   
     * @return _str : 返回的字符串   
     * @auth  方小洲   
     */   
    function _changeArrayToString(_arr){   
        var _str = _arr.join('');   
        return _str ;   
    }   
  
  
  
      
  
    var _latter = _doZip(_former);   
    document.write("压缩前:"+_former + "<br/>" );     
    document.write("压缩后:"+_changeArrayToString(_latter) + "<br/>" );   
    document.write("解压后:"+_doUnZip(_latter) + "<br/>" );   
   
  </SCRIPT>  
</HEAD>  
  
<BODY>  
     
</BODY>  
</HTML>  

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
  <TITLE> New Document </TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META NAME="Author" CONTENT="">
  <META NAME="Keywords" CONTENT="">
  <META NAME="Description" CONTENT="">
  <SCRIPT LANGUAGE="JavaScript">
       
        //压缩前字符串
        var _former = "23475439057468947233475094759027569027589720954764597063576037856975607458673087620720457634895768495764895638963470634706945769485762";
        //var _former = "2330248";

        /**
         * 压缩算法,分别取出两个数字转换成ASCII码,如果字符个数为奇数时,返回最后一位的负数值
         * @param _former  : 准备压缩的字符串
         * @return _arr :          压缩后的数组
         * @auth  方小洲
         */
        function _doZip(_former){
               
                //定义数组、数组长度
                var _arr = [] ;
                var _len = 0 ;

               
                //循环取出两个数字
                for(var i = 0 ; i < _former.length - 1 ; i=i+2){
                        var _tmp = String.fromCharCode(_former.substring(i,i+2));
                        _arr[_len++] = _tmp ;
                }

                //如果字符个数为奇数时,返回最后一位的负数值
                if(_former.length  % 2 == 1){
                        _arr[_len++] = "-"+_former.charAt(_former.length-1);
                }

                return _arr ;
        }
       
       
        /**
         * 压缩算法,分别取出两个数字转换成ASCII码,如果字符个数为奇数时,返回最后一位的负数值
         * @param  _arr  : 准备解压的数组
         * @return _latter : 解压后的字符串
         * @auth  方小洲
         */
        function _doUnZip(_arr){

                //定义数组、数组长度
                var _brr = [] ;
                var _len = 0 ;
               
                //循环取出每个字符,把ASCII转换成数字
                for(var i = 0 ; i < _arr.length -1 ; i++){
                        var _tmp = _arr[i].charCodeAt(0);  
                        if(parseInt(_tmp) < 10 ){
                                _tmp = "0" + _tmp ;
                        }
                        _brr[_len++] = _tmp ;
                }


                //取出数组的最后一个元素
                var _theLast = _arr[_arr.length - 1];

                //如果长度大于1,表示为负数,返回其绝对值就可以了
                if(_theLast.length > 1)        {
                        var _tmp = parseInt(_theLast);
                        _tmp = Math.abs(_tmp);
                        _brr[_len++] = _tmp ;
                }else {
                //表示正常压缩,按原来的解压
                        var _tmp = _theLast.charCodeAt(0);  
                        if(parseInt(_tmp) < 10 ){
                                _tmp = "0" + _tmp ;
                        }
                        _brr[_len++] = _tmp ;
                }
         

                //把数组转换为字符串
                var _latter = _brr.join('');
                return _latter ;
        }
       
        /**
         * 把数组变成字符串
         * @param _arr  : 数组
         * @return _str : 返回的字符串
         * @auth  方小洲
         */
        function _changeArrayToString(_arr){
                var _str = _arr.join('');
                return _str ;
        }



       

        var _latter = _doZip(_former);
        document.write("压缩前:"+_former + "<br/>" );  
        document.write("压缩后:"+_changeArrayToString(_latter) + "<br/>" );
        document.write("解压后:"+_doUnZip(_latter) + "<br/>" );

  </SCRIPT>
</HEAD>

<BODY>
  
</BODY>
</HTML>
只支持纯数字

fossil 发表于 2011-9-4 09:36 | 显示全部楼层
推荐链接

见证又一个准百万富翁的诞生!
3G培训就业月薪平均7K+,不3K就业不花一分钱!
20-30万急聘多名天才Java/MTA软件工程师

我是谁 发表于 2012-3-24 23:56 | 显示全部楼层
恩是的.............
qnajpfzu 发表于 2012-6-2 15:14 | 显示全部楼层

支持!

我只是路过,不发表意见


















什么牌子防辐射服好
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-3-29 13:51 , Processed in 0.140089 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表