Exemplo n.º 1
0
        public object[] infoblockinfoarray(blockinfoModel infomodel, int count)
        {
            object[]           objArray = new object[count];
            blockinfobyteModel model    = new blockinfobyteModel {
                bytemin_version         = BitConverter.GetBytes(infomodel.min_version1),
                bytemin_tip             = Encoding.Unicode.GetBytes(infomodel.min_tip2),
                bytecompress_type       = BitConverter.GetBytes(infomodel.compress_type3),
                bytecompress_block_size = BitConverter.GetBytes(infomodel.compress_block_size4),
                bytedatatype            = BitConverter.GetBytes(infomodel.datatype5),
                bytelocale             = BitConverter.GetBytes(infomodel.locale6),
                byteencoding           = BitConverter.GetBytes(infomodel.encoding7),
                bytechapter_index      = BitConverter.GetBytes(infomodel.chapter_index8),
                bytechapter_level      = BitConverter.GetBytes(infomodel.chapter_level9),
                bytechapter_name       = Encoding.Unicode.GetBytes(infomodel.chapter_name10),
                bytefile_list_offset11 = BitConverter.GetBytes(infomodel.file_list_offset11),
                bytechapter_content_decompress_lengt12 = BitConverter.GetBytes(infomodel.chapter_content_decompress_length12),
                bytechapter_file_size13 = BitConverter.GetBytes(infomodel.chapter_file_size13)
            };

            objArray[0]  = model.bytemin_version;
            objArray[1]  = model.bytemin_tip;
            objArray[2]  = model.bytecompress_type;
            objArray[3]  = model.bytecompress_block_size;
            objArray[4]  = model.bytedatatype;
            objArray[5]  = model.bytelocale;
            objArray[6]  = model.byteencoding;
            objArray[7]  = model.bytechapter_index;
            objArray[8]  = model.bytechapter_level;
            objArray[9]  = model.bytechapter_name;
            objArray[10] = model.bytefile_list_offset11;
            objArray[11] = model.bytechapter_content_decompress_lengt12;
            objArray[12] = model.bytechapter_file_size13;
            return(objArray);
        }
Exemplo n.º 2
0
        private string Getchapter(byte[] blockdata, int type)
        {
            blockStruct blockStruct = new blockStruct();
            GetData     data        = new GetData();

            blockStruct = new ByteToStructEbk3().GetBlockStruct(blockdata);
            byte[] buffer = new byte[blockStruct.header_length - 12];
            Array.Copy(blockdata, 12, buffer, 0, buffer.Length);
            blockinfoModel recodeBlockModel = this.GetRecodeBlockModel(this.ebk3_data.pbk_sys_data_decode(buffer, (int)blockStruct.decode_key), 11);

            if (recodeBlockModel.file_list_offset11 != 0)
            {
                byte[] buffer2 = new byte[blockdata.Length - recodeBlockModel.file_list_offset11];
                Array.Copy(blockdata, (int)recodeBlockModel.file_list_offset11, buffer2, 0, buffer2.Length);
            }
            byte[] buffer3 = new byte[4];
            Array.Copy(blockdata, (int)blockStruct.header_length, buffer3, 0, 4);
            int num  = (int)BitConverter.ToUInt32(this.ebk3_data.pbk_sys_data_decode(buffer3, (int)blockStruct.decode_key), 0);
            int num2 = (int)(blockStruct.header_length + 4);

            byte[] buffer4 = new byte[0x1400000];
            int    num3    = 0;
            int    num4    = 0;

            byte[] buffer5 = new byte[num * 4];
            Array.Copy(blockdata, num2, buffer5, 0, buffer5.Length);
            byte[] buffer6 = this.ebk3_data.pbk_sys_data_decode(buffer5, (int)blockStruct.decode_key);
            for (int i = 0; i < num; i++)
            {
                byte[] buffer7 = new byte[4];
                Array.Copy(buffer6, i * 4, buffer7, 0, 4);
                int    num6 = (int)BitConverter.ToUInt32(buffer7, 0);
                byte[] buff = new byte[num6];
                Array.Copy(blockdata, (num2 + (num * 4)) + num4, buff, 0, buff.Length);
                byte[] buffer9  = new byte[num6];
                byte[] buffer10 = DeCompress.Decompress(data.decodeingtext(buff, (int)blockStruct.decode_key));
                Array.Copy(buffer10, 0, buffer4, num3, buffer10.Length);
                num4 += num6;
                num3 += buffer10.Length;
            }
            byte[] bytes = new byte[num3];
            Array.Copy(buffer4, 0, bytes, 0, bytes.Length);
            if (type == 0)
            {
                return(Encoding.Unicode.GetString(bytes, 0, bytes.Length));
            }
            return(Encoding.Unicode.GetString(bytes, 0, bytes.Length));
        }
Exemplo n.º 3
0
        private string GetOneChapter(byte[] blockdata, int type, int mChapterIndex)
        {
            blockStruct blockStruct = new blockStruct();
            GetData     data        = new GetData();

            blockStruct = new ByteToStructEbk3().GetBlockStruct(blockdata);
            byte[] buffer = new byte[blockStruct.header_length - 12];
            Array.Copy(blockdata, 12, buffer, 0, buffer.Length);
            blockinfoModel recodeBlockModel = this.GetRecodeBlockModel(this.ebk3_data.pbk_sys_data_decode(buffer, (int)blockStruct.decode_key), 13);

            if (recodeBlockModel.file_list_offset11 != 0)
            {
                byte[] buffer2 = new byte[blockdata.Length - recodeBlockModel.file_list_offset11];
                Array.Copy(blockdata, (int)recodeBlockModel.file_list_offset11, buffer2, 0, buffer2.Length);
            }
            byte[] buffer3 = new byte[4];
            Array.Copy(blockdata, (int)blockStruct.header_length, buffer3, 0, 4);
            int num  = (int)BitConverter.ToUInt32(this.ebk3_data.pbk_sys_data_decode(buffer3, (int)blockStruct.decode_key), 0);
            int num2 = (int)(blockStruct.header_length + 4);

            byte[] buffer4 = new byte[num * 4];
            Array.Copy(blockdata, num2, buffer4, 0, buffer4.Length);
            byte[] buffer5 = this.ebk3_data.pbk_sys_data_decode(buffer4, (int)blockStruct.decode_key);
            uint   num3    = this.mChapterList[mChapterIndex].chapter_content_decompresss_offset5 / 0x10000;

            if (num3 > num)
            {
                return("");
            }
            int num4 = 0;
            int num5 = (int)(this.mChapterList[mChapterIndex].chapter_content_decompresss_offset5 % 0x10000);
            int num6 = 0;

            for (int i = 0; i < num3; i++)
            {
                byte[] buffer6 = new byte[4];
                Array.Copy(buffer5, i * 4, buffer6, 0, 4);
                num6  = (int)BitConverter.ToUInt32(buffer6, 0);
                num4 += num6;
            }
            byte[] buffer7 = new byte[4];
            Array.Copy(buffer5, (int)(num3 * 4), buffer7, 0, 4);
            num6 = (int)BitConverter.ToUInt32(buffer7, 0);
            byte[] buff = new byte[num6];
            Array.Copy(blockdata, (num2 + (num * 4)) + num4, buff, 0, buff.Length);
            byte[] buffer9  = new byte[num6];
            byte[] buffer10 = DeCompress.Decompress(data.decodeingtext(buff, (int)blockStruct.decode_key));
            byte[] bytes    = new byte[this.mChapterList[mChapterIndex].chapter_content_decompress_length6];
            string str      = "";

            if ((num5 + bytes.Length) < 0x10000)
            {
                Array.Copy(buffer10, num5, bytes, 0, bytes.Length);
            }
            else
            {
                Array.Copy(buffer10, num5, bytes, 0, 0x10000 - num5);
            }
            if ((num5 + this.mChapterList[mChapterIndex].chapter_content_decompress_length6) > 0x10000L)
            {
                num3++;
                if (num3 >= num)
                {
                    return("");
                }
                int num1 = ((int)(num5 + this.mChapterList[mChapterIndex].chapter_content_decompress_length6)) % 0x10000;
                num6 = 0;
                num4 = 0;
                for (int j = 0; j < num3; j++)
                {
                    byte[] buffer12 = new byte[4];
                    Array.Copy(buffer5, j * 4, buffer12, 0, 4);
                    num6  = (int)BitConverter.ToUInt32(buffer12, 0);
                    num4 += num6;
                }
                buffer7 = new byte[4];
                Array.Copy(buffer5, (int)(num3 * 4), buffer7, 0, 4);
                num6 = (int)BitConverter.ToUInt32(buffer7, 0);
                buff = new byte[num6];
                Array.Copy(blockdata, (num2 + (num * 4)) + num4, buff, 0, buff.Length);
                buffer9 = new byte[num6];
                Array.Copy(DeCompress.Decompress(data.decodeingtext(buff, (int)blockStruct.decode_key)), 0, bytes, 0x10000 - num5, bytes.Length - (0x10000 - num5));
            }
            if (type != 0)
            {
                str = Encoding.Unicode.GetString(bytes, 0, bytes.Length);
            }
            return(str);
        }
Exemplo n.º 4
0
        private blockinfoModel GetRecodeBlockModel(byte[] allbuffer, int count)
        {
            blockinfoModel model = new blockinfoModel();

            byte[] buffer  = new byte[allbuffer.Length - 4];
            byte[] buffer2 = new byte[4];
            Array.Copy(allbuffer, 0, buffer2, 0, 4);
            BitConverter.ToUInt32(buffer2, 0);
            Array.Copy(allbuffer, 4, buffer, 0, buffer.Length);
            int num = 0;

            for (int i = 0; i < count; i++)
            {
                byte[] buffer3 = new byte[4];
                byte[] buffer4 = new byte[4];
                Array.Copy(buffer, num, buffer3, 0, buffer3.Length);
                uint num3 = BitConverter.ToUInt32(buffer3, 0);
                Array.Copy(buffer, num + 4, buffer4, 0, buffer4.Length);
                uint   num4    = BitConverter.ToUInt32(buffer4, 0);
                byte[] buffer5 = new byte[num4 - 8];
                Array.Copy(buffer, num + 8, buffer5, 0, buffer5.Length);
                num += (int)num4;
                switch (num3)
                {
                case 1:
                    model.min_version1 = BitConverter.ToUInt32(buffer5, 0);
                    break;

                case 2:
                    model.min_tip2 = Encoding.Unicode.GetString(buffer5, 0, buffer5.Length);
                    break;

                case 3:
                    model.compress_type3 = BitConverter.ToUInt32(buffer5, 0);
                    break;

                case 4:
                    model.compress_block_size4 = BitConverter.ToUInt32(buffer5, 0);
                    break;

                case 5:
                    model.datatype5 = BitConverter.ToUInt32(buffer5, 0);
                    break;

                case 6:
                    model.locale6 = BitConverter.ToUInt32(buffer5, 0);
                    break;

                case 7:
                    model.encoding7 = BitConverter.ToUInt32(buffer5, 0);
                    break;

                case 8:
                    model.chapter_index8 = BitConverter.ToUInt32(buffer5, 0);
                    break;

                case 9:
                    model.chapter_level9 = BitConverter.ToUInt16(buffer5, 0);
                    break;

                case 10:
                    model.chapter_name10 = Encoding.Unicode.GetString(buffer5, 0, buffer5.Length);
                    break;

                case 11:
                    model.file_list_offset11 = BitConverter.ToUInt32(buffer5, 0);
                    break;

                case 12:
                    model.chapter_content_decompress_length12 = BitConverter.ToUInt32(buffer5, 0);
                    break;

                case 13:
                    model.chapter_file_size13 = BitConverter.ToUInt32(buffer5, 0);
                    break;
                }
            }
            return(model);
        }
Exemplo n.º 5
0
 public byte[] ReturnBlockRecord(blockinfoModel blockinfomodel, int count, int key)
 {
     object[] infomodellist = new blockinfoArray().infoblockinfoarray(blockinfomodel, count);
     byte[]   recodeByte    = this.GetRecodeByte(infomodellist);
     return(this.ebk_data.pbk_sys_data_encode(recodeByte, key));
 }