示例#1
0
文件: u3d.cs 项目: Klanly/ncnn
        public unsafe void ParseAsset(Stream reader)
        {
            byte[] buf = reader.ReadBytes(0x30, 0, 0x14);



            fixed(byte *srcbb = &buf[0])
            {
                bswap *bs  = (bswap *)srcbb;
                uint   ver = bs[2]._1u();

                Header.m_Version   = ver;
                Header.m_Endianess = bs[4];
                if (ver >= 0x16)
                {
                    reader.Read(buf, 0x14, 0x1C);
                    bswap8 *bs8 = (bswap8 *)srcbb;

                    Header.v16h_0 = bs8[0];
                    Header.v16h_C = bs[3];

                    Header.m_MetadataSize = bs[5]._1u();
                    Header.m_FileSize     = bs8[3]._1i();
                    Header.m_DataOffset   = bs8[4]._1i();

                    Header.v16h_28 = bs[10];
                    Header.v16h_2C = bs[11];
                }
                else
                {
                    Header.m_MetadataSize = bs[0]._1u();
                    Header.m_FileSize     = bs[1]._1u();

                    Header.m_DataOffset = bs[3]._1u();
                    if (ver < 9)
                    {
                    }
                }
            }

            long cur = reader.Length;

            if (Header.m_MetadataSize >= cur || Header.m_DataOffset >= cur)
            {
                return;
            }

            cur = reader.Position;

            buf = reader.ReadBytes(0x10);

            cur += buf.strlen(out VerionString);

            reader.Position = cur;
        }
示例#2
0
文件: u3d.cs 项目: Klanly/ncnn
        public static unsafe SerializedFile Create(string path, SerializedFile src)
        {
            Stream reader = File.OpenRead(path);

            if (reader.Length < 0x14)
            {
                reader.Close();
                return(null);
            }

            byte[] buf = reader.ReadBytes(0x30, 0, 0x14);

            ABheader abhh = null;

            if (buf.ru4(0) == 0x74696e55)
            {
                abhh   = new ABheader(reader);
                reader = abhh.reNewReader();

                buf = reader.ReadBytes(0x30, 0, 0x14);
            }

            var tmpHeader = new SerializedFileHeader();

            fixed(byte *srcbb = &buf[0])
            {
                bswap *bs  = (bswap *)srcbb;
                uint   ver = bs[2]._1u();

                tmpHeader.m_Version   = ver;
                tmpHeader.m_Endianess = bs[4];
                if (ver >= 0x16)
                {
                    reader.Read(buf, 0x14, 0x1C);
                    bswap8 *bs8 = (bswap8 *)srcbb;

                    tmpHeader.v16h_0 = bs8[0];
                    tmpHeader.v16h_C = bs[3];

                    tmpHeader.m_MetadataSize = bs[5]._1u();
                    tmpHeader.m_FileSize     = bs8[3]._1u();
                    tmpHeader.m_DataOffset   = bs8[4]._1i();

                    tmpHeader.v16h_28 = bs[10];
                    tmpHeader.v16h_2C = bs[11];
                }
                else
                {
                    tmpHeader.m_MetadataSize = bs[0]._1u();
                    tmpHeader.m_FileSize     = bs[1]._1u();

                    tmpHeader.m_DataOffset = bs[3]._1u();
                    if (ver < 9)
                    {
                    }
                }
            }

            long cur = reader.Length;

            if (tmpHeader.m_MetadataSize >= cur || tmpHeader.m_DataOffset >= cur)
            {
                return(null);
            }


            //if(abhh.resSraw<0)
            //	abhh.resSloc(tmpHeader.m_FileSize);


            if (src == null)
            {
                return(new SerializedFile(reader, tmpHeader, abhh));
            }
            else
            {
                src.Load(reader, tmpHeader, abhh);
                return(src);
            }
        }