有一串数字加逗号组成的字符串,长度嘛从几十到几千不等,每组数字都有唯一性,每组数字之间由逗号进行分隔,
如下:
10452,10455,10458,10472,10498,10499,10500,10501,10502,10510,10511用什么方法才能将此字符串压缩成很短的字符串,还能够解出来求教,用JS的方法,谢谢

解决方案 »

  1.   

    //数值范围是否都是0~0xFF(即0~65535)?
    //如果是的话,可以这么做:
    function compress(s) {
    var array = s.split(',');
    return String.fromCharCode.apply(null, array);
    }
    function extract(s) {
    var array = [];
    var len = s.length;
    for (var i = 0; i < len; i++) {
    array.push(s.charCodeAt(i));
    }
    return array.join(',');
    }
    var s = '10452,10455,10458,10472,10498,10499,10500,10501,10502,10510,10511';
    var c = compress(s);
    var e = extract(c);
    alert(s);
    alert(c);
    alert(e);
      

  2.   

    //数值范围是否都是0~0xFF(即0~65535)?
    //如果是的话,可以这么做:
    function compress(s) {
    var array = s.split(',');
    return String.fromCharCode.apply(null, array);
    }
    function extract(s) {
    var array = [];
    var len = s.length;
    for (var i = 0; i < len; i++) {
    array.push(s.charCodeAt(i));
    }
    return array.join(',');
    }
    var s = '10452,10455,10458,10472,10498,10499,10500,10501,10502,10510,10511';
    var c = compress(s);
    var e = extract(c);
    alert(s);
    alert(c);
    alert(e);
      

  3.   

    自己弄一个62进制呗
    0-9a-zA-Z分别代表其中的数字。。
      

  4.   

    前面写错了,0xFF是255,0xFFFF才是65535。
    // 压缩算法1,处理范围:0~0xFFFF(0~65535)整数
    function compress(s) {
    var array = s.split(',');
    return String.fromCharCode.apply(null, array);
    }
    function extract(s) {
    var array = [];
    var len = s.length;
    for (var i = 0; i < len; i++) {
    array.push(s.charCodeAt(i));
    }
    return array.join(',');
    }// 压缩算法2,处理范围:0~JS可表示的最大整数,可大于0xFFFFFFFF(4294967295)
    function compress2(s) {
    var array = s.split(',');
    var len = array.length;
    for (var i = 0; i < len; i++) {
    array[i] = Number(array[i]).toString(36);
    }
    return array.join(',');
    }
    function extract2(s) {
    var array = s.split(',');
    var len = array.length;
    for (var i = 0; i < len; i++) {
    array[i] = parseInt(array[i], 36);
    }
    return array.join(',');
    }// 压缩算法3:处理范围:0~0xFFFFFFFF(0~4294967295)整数
    function compress3(s) {
    var array = s.split(',');
    var array2 = [];
    var len = array.length;
    for (var i = 0; i < len; i++) {
    var n = array[i];
    var low = n % 0x100;
    var high = (n - low) / 0x100;
    array2.push(low);
    array2.push(high);
    }
    return String.fromCharCode.apply(null, array2);
    }
    function extract3(s) {
    var array = [];
    var len = s.length;
    for (var i = 0; i < len; i+=2) {
    var low = s.charCodeAt(i);
    var high = s.charCodeAt(i+1);
    array.push(low + high * 0x100);
    }
    return array.join(',');
    }// 测试
    function test1(s) {
    var c = compress(s);
    var e = extract(c);
    alert(['压缩算法1:','压缩前:'+s,'解压后:'+e,'是否正确解压:'+(s==e),'压缩比:'+c.length+'/'+s.length,'压缩后:'+c].join('\n'));
    }
    function test2(s) {
    var c = compress2(s);
    var e = extract2(c);
    alert(['压缩算法2:','压缩前:'+s,'解压后:'+e,'是否正确解压:'+(s==e),'压缩比:'+c.length+'/'+s.length,'压缩后:'+c].join('\n'));
    }
    function test3(s) {
    var c = compress3(s);
    var e = extract3(c);
    alert(['压缩算法3:','压缩前:'+s,'解压后:'+e,'是否正确解压:'+(s==e),'压缩比:'+c.length+'/'+s.length,'压缩后:'+c].join('\n'));
    }var s = '10452,10455,10458,10472,10498,10499,10500,10501,10502,10510,10511';
    test1(s);
    test2(s);
    test3(s);var s = '10452,10455,10458,10472,10498,10499,10500,10501,10502,10510,10511,1000000';
    test1(s);
    test2(s);
    test3(s);var s = '10452,10455,10458,10472,10498,10499,10500,10501,10502,10510,10511,1000000000000';
    test1(s);
    test2(s);
    test3(s);