把一个长度为20左右的字符串压缩为integer,并且可以解压出来..
各位大侠帮帮忙..
分不够了可以再加

解决方案 »

  1.   

    单个字符转成ASCII码再转成字符是不是要这样?还是要加密?
      

  2.   

    啥意思?20个字符每个转换为integer?还是20个字符压缩为1个integer?
      

  3.   

    也可以说是加密..
    举个例子吧.
    比如:
      s := 'jfej2_3jf';
      经转换后S变为22213,反转换后S又还原了..
    想要找个这样的算法.S的长度在20左右..
    意思是把S转换成不超过integer范围的数字
      

  4.   

    还有这种事情?
    如果有一个字符串有1M,那加密之后就只有一个数字了
    这压缩比是多少啊?自己算算,还不能超过integer的范围?扯淡吧
      

  5.   

    Zlib.pas和 Zlibconst.pas 好像可以压流
      

  6.   

    如果字符串不是很有规律,100^20==2^32,怎么可能?s := 'jfej2_3jf'; 
    经 什么规律的转换后 S才能变为22213???
      

  7.   

    2+3=5如果你不知道上面的过程X+Y=5你能求出唯一的X,Y分别是多少嘛?
      

  8.   

    这个问题挺有意思,
    如果字符串中的可能出现的单个字符不超过100种的话
    是可以做的,如16楼所言100^20==2^32,integer最多也只能表示100种字符排列结合20次
    所以请楼主给出字符串内容的范围
    0~9,10个数字
    a~z及A~Z共52个字母
    符号有多少个,分别是什么,列出来,
    如果符号不超过38个,我可以试着写一下这个算法
    如果还包含了有非标准ASC字符,比如汉字的话……无能为力了
      

  9.   

    先谢谢各位大侠的解答..呵呵
    范围是['a'..'z','A'..'Z','_','0'..'9']
      

  10.   

    太有意思了,一个int32能用16进制表示的ascii字符是8个,很显然,只由16个字符表达的信息存在很大的冗余
    如果能把20个字符压缩成4字节,那接下来可以把这4字节变成8字节,于是两个半int32又凑成了一个20字节包含大量冗余信息的字符串
    接下来又可以把这20个字符压成4字节,又可以两个半重复上面的过程
    于是奇迹出现了,整个宇宙的信息两个半两个半的压缩成了4字节楼主,如果谁发现了这个算法,100分算个毛,卖硬盘的厂商都可以破产是小事,整个信息论被改写也是小事,大事是我们所在的宇宙已经被改变了,全部的数与逻辑都可以改写了。能做出这个来的绝对不是人,而是神,但是神会为了你那点儿不够用了再加的没用的破分儿改变这个宇宙么?
      

  11.   

    用Int64型,把字符串的每个转换成字符ASC码相加后再转成INT64,这样你自己在加入算法,要还原时,用你加入的算法返算回来,就能得到你原来的ASC码的字符,但要注意用CHR返回字符时所取的长度,ASC码有1位、2位、3位的,这个你自己就要相方法解决了。
    ORD('a')=97
    ORD('z')=122
    ORD('A')=65
    ORD('Z')=90
    要是字符‘AZ’就可以转成'6590'
      

  12.   

    如果是纯英文的,可以把每个字节压缩到6位甚至是5位,考虑到熵值可能可以压缩到4位。
    如果你精通压缩的话,也许int64可以达到,但是你得准备解压缩的时候出问题。
      

  13.   

    楼主是从哪里看到的,还是突发奇想?
    字符串编码成一个Integer是没有问题的,但过程是不可逆的.
      

  14.   

    15楼里的那两个,加参数 -h 好像就是huffman
      

  15.   

    他肯定自己就没实现过huffman tree,小白问小白,然后还跑过来答小白
      

  16.   

    sql版没问题,delphi在升级中??