请教下各位大侠,整形数据如何压缩。例,一个uint a=10,想压缩成byte,如果a的值超出byte的范围用2个byte 存取。各位指点下。

解决方案 »

  1.   

    先判断a的大小呗,如果小于256用一个byte,如果大于255用2个byte表示,第一个byte存a的高8位,第二个byte存a的低8位就可以
      

  2.   

    第一个byte存a的高8位,第二个byte存a的低8位就可以可以举例吗?
      

  3.   

    可以用每个byte的最高位,来作为停止位(0表示停止,1表示后面还有数据)。这样一来,每个byte实际可以用到7个位。小于127的整数,用一个byte就可以表示:
    00000000 : 0
    01000001 : 65
    01111111 : 127大于127的整数,就需要用两个bytes,比如:
    10000001 00000000 : 128   (1*128 + 0)
    11111111 01111111 : 16383 (127*128 + 127)大于16383, 就需要用3个bytes,比如:
    10000001 00000000 00000000 : 16384  (1*128*128 + 0*128 + 0)
    11111111 11111111 01111111 : 2097151(127*128*128 + 127*128 + 127)而uint.Max则需要5个bytes,比如:
    11111111 11111111 11111111 11111111 00001111 : 4294967295这种编码方式也叫Base128。DotNet中的BinaryWriter.Write(string)也用这种编码来写一个前缀长度。
      

  4.   

    大于16383, 就需要用3个bytes,比如:
    10000001 10000000 00000000 : 16384  (1*128*128 + 0*128 + 0)