正常情况下FFFF为65535,如何突破呢?

解决方案 »

  1.   

    Elysium(東鱗覀爫),具体怎么做?我往一个二进制文件中写入Filewrite(handle,VALUE,2);
    VALUE怎么突破65535?
      

  2.   

    keiy() 的话二个字节一共65536(0-65535)种状态,除非你的数据是有规律的,否则不可能表示大于65535的数
      

  3.   

    FFFF = 65535 是使用16进制, 如果使用更高的进制可以吗?例如17进制,
    0 1 2 3 4 5 6 7 8 9 A B C D E F H
    FFFF = 十进制 15 * 16^3 + 15*16^2 + 15*16 + 15 = 65535
    HHHH = 十进制 16 * 17^3 + 16*17^2 + 16*17 + 16 = ..
      

  4.   

    如果真要写个比65535大的数,其实,最简单的方法是……
    11111111 11111111
    前8位是底数,后8位是幂,
    也就是说,用2字节+一系列算法,把FF FF让计算机理解成FF的FF次方…………
      

  5.   

    For_suzhen(不懂装懂)和ClarkKidd(神!啊!) 的想法不错.有等大家讨论.
      

  6.   

    就象前面ClarkKidd(神!啊!) 所说,如果用一字节做指数,一字节做底,这样可以表达一个很大的数.我只要表达出来就可以,而不是非要写入个65535.这样的话就需要一个算法,用两个字节表达0..10万的算法.
      

  7.   

    我在给客户做个索引方面的程序.现在2个字节,程序在650M左右,如果4个字节就超出1G了.一张CD光盘刻录不下了.总不至于换DVD吧.这年头还是考虑一下贫下中农吧.
      

  8.   

    LiHaiYan2001()    一分钟,如何突破60秒?
    ---------------------------------------------------
    支持
    楼主:            我在给客户做个索引方面的程序.现在2个字节,程序在650M左右,如果4个字节就超出1G了.一张CD光盘刻录不下了.总不至于换DVD吧.这年头还是考虑一下贫下中农吧.
    -----------------------------------------------------------------------------------
    楼主能把上述言论解释一下吗?
      

  9.   

    两个字节,无论你用什么方法,它最多表示出65536种不同的值。你可以用来表示出0~65535这连续的65536个整数,也可以用来表示-32768~32767这连续的65536个整数,也可以用来表示65536个不同的字符(就象Unicode)。但是无论如何,两个字节也表示不出第65537个值来的,这个再讨论也没结果的,不要浪费时间了。
      

  10.   

    其实倒是有办法的,关键在于楼主所说的不连续这一项,
    可以用这种方法
    两个字节,前一个字节 a 表示数值表的索引,后一个字节 b 表示偏差值,首先在文件首部建一个不连续数值表 X ,长度256,那么存入的值可以这样表示 X[a]+b ,但这样仍然只能有65536种变化,也就意味着你的索引数据长度只能小于等于65536,
    还有一种方法,压缩,将数据压缩起来,这样原数据应该可以超过1G,在使用的时候取出适当的部分进行解压缩
      

  11.   

    以上两位真把压缩算法当成"神法"了,一共两个字节,16个Bit,还要压缩?
      

  12.   

    Elysium(東鱗覀爫),具体怎么做?我往一个二进制文件中写入Filewrite(handle,VALUE,2);
    VALUE怎么突破65535?
    --------------------------------------------
    是不是做的文件编码规范不满足需求了,只能改成4个字节了。
    不过有一种编码方式是自适应需求的,可以参考一下:uintvar - variable length unsigned integerMany fields in the data unit formats are of variable length. Typically, there will be an associated field that specifies the size of the variable length field. In order to keep the data unit formats as small as possible, a variable length unsigned integer encoding is used to specify lengths. The larger the unsigned integer, the larger the size of its encoding.Each octet of the variable length unsigned integer is comprised of a single Continue bit and 7 bits of payload.To encode a large unsigned integer, split it into 7-bit fragments and place them in the payloads of multiple octets. The most significant bits are placed in the first octets with the least significant bits ending up in the last octet. All octets MUST set the Continue bit to 1 except the last octet, which MUST set the Continue bit to 0.For example, the number 0x87A5 (1000 0111 1010 0101) is encoded in three octets:
    1 0000010 1 0001111 0 0100101.The unsigned integer MUST be encoded in the smallest encoding possible. In other words, the encoded value MUST NOT start with an octet with the value 0x80.In the data unit format descriptions, the data type uintvar will be used to indicate a variable length integer field. The maximum size of a uintvar is 32 bits. It will be encoded in no more than five octets. It MUST be present even if its value is zero.以上摘自WAP协议族WSP规范 (WAP-230-WSP)8.1.2,主要意思就是说把要编码的无符号整形数分为n个7bit,除了最后的一个7bit前补0外,其它的前面都补1,表示后面还有连续的字节。
      

  13.   

    晕倒,jadeluo(秀峰) 没搞明白我说的意思,我说压缩是指使用4字节来存储,然后把总体存储的数据进行压缩,压缩算法我还是懂一点的,当然明白2字节根本没有压缩的余地,但是最后存储出的文件当然可以有效压缩了,而且压缩比恐怕还是蛮高的....
      

  14.   

    var
    s:string;
    a,b:Integer;
    begin  a:=StrTOInt(edit1.Text) Div 256;
      b:=StrToInt(edit1.Text) Mod 256;
      s:=s+chr(a)+chr(b);
    看下这样行不行
    可以存为两个字节
      

  15.   

    to ybbhond(路边卖菜的)
    ===========================================================================
    知不知道65536 div 256是多少?你1字节能放下吗?
      

  16.   

    数据是有规则的!你可以建立你自己的规则!
    如果你你数据只在0..>65535范围的话,你可以:
    >65535的数 
    65536=-1
    65537=-2
    65538=-3
    ......
    写进磁盘里去,在自己读出时,-1,-2,-3.....就转换一下就好了!
      

  17.   

    如果你能规定1个字节不是8bit就可以了,比如规定1个字节是20位,看看能不能保存65536
      

  18.   

    to   maozefa(阿发伯) 65536 div 256chr
    取他的字符,结果是一位吧,但字符是一些乱码,不过都是可以还原成原来的数值。
      

  19.   

    To ybbhond(路边卖菜的): 你需要好好补补基础课了。65536 div 256 = 256,256如何存入一个字节中?这个问题与楼主的65536如何存入两个字节完全一样,同样无解。前面已经说过了,两个字节只能表示65536个不同的值,想表示第65537种值是没有可能的,不要再在这上面浪费时间了。
      

  20.   

    hsgrass37301(零点) 兄与我想法一样! 这是个最简单的方法!  当然压缩也没问题! 只是算法麻烦些! 如果真的想用这方法和我联系吧  现在上班没时间写!:)  MSN: [email protected]
      

  21.   

    zhmnsw(糖醋鼻子)
    理论上把所有数据都可以压缩成一个0和一个1
    ------------------------------------------你们老师就这样教你的?
      

  22.   

    哈哈,首先肯定楼上ahjoe(强哥)反问得好,反问得对。然后,跟zhmnsw(糖醋鼻子)等开个玩笑:你比较适合去学道家阴阳学。因为对阴阳家来说,世界万物,无非阴阳。道生一,一生二,二生三,三生万物。道家看数据块:1就是有数据,0就是无数据。哈哈。精度要求不高。
      

  23.   

    谢谢大家,从大家的讨论中我受益匪浅,而lxtnt() 给我的帮助最大,而我要保存的ID号全是正数,而当大于65535时,我是这样做保存的,即:
    -(ID-65535)
    读出来的时候判断是否是负数,如果为负,则程序转换回去。今天放一下分,看能否成功,前两次都不成功.