예제 #1
0
        public static byte[] Encode(byte[] src)
        {
            /* quick & dirty format80 encoder -- only uses raw copy operator, terminated with a zero-run. */
            /* this does not produce good compression, but it's valid format80 */

            var ctx = new FastByteReader(src);
            var ms  = new MemoryStream();

            do
            {
                var len = Math.Min(ctx.Remaining(), 0x3F);
                ms.WriteByte((byte)(0x80 | len));
                while (len-- > 0)
                {
                    ms.WriteByte(ctx.ReadByte());
                }
            }while (!ctx.Done());

            ms.WriteByte(0x80);                 // terminator -- 0-length run.

            return(ms.ToArray());
        }
예제 #2
0
        public static byte[] Encode(byte[] src)
        {
            /* quick & dirty format80 encoder -- only uses raw copy operator, terminated with a zero-run. */
            /* this does not produce good compression, but it's valid format80 */

            var ctx = new FastByteReader(src);
            var ms = new MemoryStream();

            do
            {
                var len = Math.Min(ctx.Remaining(), 0x3F);
                ms.WriteByte((byte)(0x80 | len));
                while (len-- > 0)
                    ms.WriteByte(ctx.ReadByte());
            }
            while (!ctx.Done());

            ms.WriteByte(0x80);	// terminator -- 0-length run.

            return ms.ToArray();
        }
예제 #3
0
        public static int EncodeInto(byte[] src, byte[] dest)
        {
            /* quick & dirty format80 encoder -- only uses raw copy operator, terminated with a zero-run. */
            /* this does not produce good compression, but it's valid format80 */

            var destIndex = 0;
            var ctx = new FastByteReader(src);

            do
            {
                var len = Math.Min(ctx.Remaining(), 0x3F);
                dest[destIndex++] = (byte)(0x80 | len);
                if (len > 0)
                    ctx.CopyTo(dest, destIndex, len);
            }
            while (!ctx.Done());

            return destIndex;
        }