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()); }
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(); }
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; }