Example #1
0
        public byte[] ToBytes()
        {
            MemoryStream table = new MemoryStream();

            if (fakeStruct == null)
            {
                table.Write(Zreo, 0, 4);
            }
            else
            {
                byte[] buf = fakeStruct.ToBytes();
                Int32  len = buf.Length;
                table.Write(len.ToBytes(), 0, 4);
                table.Write(buf, 0, len);
            }
            table.Write(max.ToBytes(), 0, 4);
            MemoryStream ms     = new MemoryStream();
            Int32        offset = 0;

            for (int i = 0; i < max; i++)
            {
                var buf = GetBytes(buff[i].obj);
                table.Write(buff[i].rc.ToBytes(), 0, 2);   //引用计数
                table.Write(buff[i].type.ToBytes(), 0, 2); //数据类型
                table.Write(buff[i].size.ToBytes(), 0, 4); //数据结构体长度
                table.Write(offset.ToBytes(), 0, 4);       //数据偏移地址
                if (buf == null)
                {
                    ms.Write(Zreo, 0, 4);
                    offset += 4;
                }
                else
                {
                    Int32 len = buf.Length;
                    ms.Write(len.ToBytes(), 0, 4);
                    ms.Write(buf, 0, len);
                    offset += len + 4;
                }
            }
            byte[] tmp = ms.ToArray();
            table.Write(tmp, 0, tmp.Length);
            tmp = table.ToArray();
            ms.Dispose();
            table.Dispose();
            return(tmp);
        }