当前位置: 首页>>代码示例>>C#>>正文


C# EndianBinaryReader.ReadStringNT方法代码示例

本文整理汇总了C#中EndianBinaryReader.ReadStringNT方法的典型用法代码示例。如果您正苦于以下问题:C# EndianBinaryReader.ReadStringNT方法的具体用法?C# EndianBinaryReader.ReadStringNT怎么用?C# EndianBinaryReader.ReadStringNT使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在EndianBinaryReader的用法示例。


在下文中一共展示了EndianBinaryReader.ReadStringNT方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: txt1

 public txt1(EndianBinaryReader er)
     : base(er)
 {
     long baseoffset = er.BaseStream.Position - 0x4C;
     NrCharacters = er.ReadUInt16();
     NrCharacters2 = er.ReadUInt16();
     MaterialId = er.ReadUInt16();
     FontId = er.ReadUInt16();
     PositionType = er.ReadByte();
     TextAlignment = er.ReadByte();
     TextFlags = er.ReadByte();
     Padding = er.ReadByte();
     StringOffset = er.ReadUInt32();
     TopColor = er.ReadColor8();
     BottomColor = er.ReadColor8();
     FontSize = er.ReadVector2();
     CharSpace = er.ReadSingle();
     LineSpace = er.ReadSingle();
     er.BaseStream.Position = baseoffset + StringOffset;
     Text = er.ReadStringNT(Encoding.Unicode);
     er.BaseStream.Position = baseoffset + SectionSize;
 }
开发者ID:Ermelber,项目名称:EveryFileExplorer,代码行数:22,代码来源:txt1.cs

示例2: BoneMember

 public BoneMember(EndianBinaryReader er)
     : base(er)
 {
     BoneNameOffset = (uint)er.BaseStream.Position + er.ReadUInt32();
     long curpos = er.BaseStream.Position;
     er.BaseStream.Position = BoneNameOffset;
     BoneName = er.ReadStringNT(Encoding.ASCII);
     er.BaseStream.Position = curpos;
 }
开发者ID:Ermelber,项目名称:EveryFileExplorer,代码行数:9,代码来源:CMDL.cs

示例3: CMDL

        public CMDL(EndianBinaryReader er)
        {
            Type = er.ReadUInt32();
            Signature = er.ReadString(Encoding.ASCII, 4);
            if (Signature != "CMDL") throw new SignatureNotCorrectException(Signature, "CMDL", er.BaseStream.Position);
            Revision = er.ReadUInt32();
            NameOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32();
            Unknown2 = er.ReadUInt32();
            Unknown3 = er.ReadUInt32();
            Flags = er.ReadUInt32();
            IsBranchVisible = er.ReadUInt32() == 1;
            NrChildren = er.ReadUInt32();
            Unknown7 = er.ReadUInt32();
            NrAnimationGroupDescriptions = er.ReadUInt32();
            AnimationGroupDescriptionsDictOffset =er.ReadUInt32();
            if (AnimationGroupDescriptionsDictOffset != 0) AnimationGroupDescriptionsDictOffset += (UInt32)er.BaseStream.Position - 4;
            Scale = er.ReadVector3();
            Rotation = er.ReadVector3();
            Translation = er.ReadVector3();
            LocalMatrix = er.ReadSingles(4 * 3);
            WorldMatrix = er.ReadSingles(4 * 3);
            NrMeshes = er.ReadUInt32();
            MeshOffsetsOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32();
            NrMaterials = er.ReadUInt32();
            MaterialsDictOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32();
            NrShapes = er.ReadUInt32();
            ShapeOffsetsOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32();
            NrMeshNodes = er.ReadUInt32();
            MeshNodeVisibilitiesDictOffset = er.ReadUInt32();
            if (MeshNodeVisibilitiesDictOffset != 0) MeshNodeVisibilitiesDictOffset += (UInt32)er.BaseStream.Position - 4;
            Unknown23 = er.ReadUInt32();
            Unknown24 = er.ReadUInt32();
            Unknown25 = er.ReadUInt32();
            if ((Type & 0x80) != 0) SkeletonInfoSOBJOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32();

            long curpos = er.BaseStream.Position;
            er.BaseStream.Position = NameOffset;
            Name = er.ReadStringNT(Encoding.ASCII);
            if (AnimationGroupDescriptionsDictOffset != 0)
            {
                er.BaseStream.Position = AnimationGroupDescriptionsDictOffset;
                AnimationInfoDict = new DICT(er);
            }
            er.BaseStream.Position = MeshOffsetsOffset;
            MeshOffsets = new UInt32[NrMeshes];
            for (int i = 0; i < NrMeshes; i++)
            {
                MeshOffsets[i] = (UInt32)er.BaseStream.Position + er.ReadUInt32();
            }
            er.BaseStream.Position = MaterialsDictOffset;
            MaterialsDict = new DICT(er);

            Materials = new MTOB[NrMaterials];
            for (int i = 0; i < NrMaterials; i++)
            {
                er.BaseStream.Position = MaterialsDict[i].DataOffset;
                Materials[i] = new MTOB(er);
            }

            er.BaseStream.Position = ShapeOffsetsOffset;
            ShapeOffsets = new UInt32[NrShapes];
            for (int i = 0; i < NrShapes; i++)
            {
                ShapeOffsets[i] = (UInt32)er.BaseStream.Position + er.ReadUInt32();
            }

            if (MeshNodeVisibilitiesDictOffset != 0)
            {
                er.BaseStream.Position = MeshNodeVisibilitiesDictOffset;
                MeshNodeVisibilitiesDict = new DICT(er);
            }

            AnimationGroupDescriptions = new GraphicsAnimationGroup[NrAnimationGroupDescriptions];
            for (int i = 0; i < NrAnimationGroupDescriptions; i++)
            {
                er.BaseStream.Position = AnimationInfoDict[i].DataOffset;
                AnimationGroupDescriptions[i] = new GraphicsAnimationGroup(er);
            }

            Meshes = new Mesh[NrMeshes];
            for (int i = 0; i < NrMeshes; i++)
            {
                er.BaseStream.Position = MeshOffsets[i];
                Meshes[i] = new Mesh(er);
            }

            Shapes = new SeparateDataShape[NrShapes];
            for (int i = 0; i < NrShapes; i++)
            {
                er.BaseStream.Position = ShapeOffsets[i];
                Shapes[i] = new SeparateDataShape(er);
            }

            MeshNodeVisibilities = new MeshNodeVisibilityCtr[NrMeshNodes];
            for (int i = 0; i < NrMeshNodes; i++)
            {
                er.BaseStream.Position = MeshNodeVisibilitiesDict[i].DataOffset;
                MeshNodeVisibilities[i] = new MeshNodeVisibilityCtr(er);
            }

//.........这里部分代码省略.........
开发者ID:Ermelber,项目名称:EveryFileExplorer,代码行数:101,代码来源:CMDL.cs

示例4: AnimationGroupMember

 public AnimationGroupMember(EndianBinaryReader er)
 {
     Type = (AnimationGroupMemberType)er.ReadUInt32();
     PathOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32();
     MemberOffset = er.ReadUInt32();
     BlendOperationIndex = er.ReadUInt32();
     ObjectType = er.ReadUInt32();
     MemberType = er.ReadUInt32();
     ResMaterialPtr = er.ReadUInt32();
     //Type Specific Stuff
     long curpos = er.BaseStream.Position;
     er.BaseStream.Position = PathOffset;
     Path = er.ReadStringNT(Encoding.ASCII);
     er.BaseStream.Position = curpos;
 }
开发者ID:Ermelber,项目名称:EveryFileExplorer,代码行数:15,代码来源:CMDL.cs

示例5: GraphicsAnimationGroup

            public GraphicsAnimationGroup(EndianBinaryReader er)
            {
                Type = er.ReadUInt32();
                Flags = (GraphicsAnimGroupFlags)er.ReadUInt32();
                NameOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32();
                MemberType = (GraphicsMemberType)er.ReadUInt32();
                NrMembers = er.ReadUInt32();
                MemberInfoDICTOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32();
                NrBlendOperations = er.ReadUInt32();
                BlendOperationArrayOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32();
                EvaluationTiming = (AnimGroupEvaluationTiming)er.ReadUInt32();

                long curpos = er.BaseStream.Position;
                er.BaseStream.Position = NameOffset;
                Name = er.ReadStringNT(Encoding.ASCII);
                er.BaseStream.Position = MemberInfoDICTOffset;
                MemberInfoDICT = new DICT(er);
                er.BaseStream.Position = BlendOperationArrayOffset;
                BlendOperations = er.ReadUInt32s((int)NrBlendOperations);

                AnimationGroupMembers = new AnimationGroupMember[NrMembers];
                for (int i = 0; i < NrMembers; i++)
                {
                    er.BaseStream.Position = MemberInfoDICT[i].DataOffset;
                    AnimationGroupMembers[i] = AnimationGroupMember.FromStream(er);
                }
                er.BaseStream.Position = curpos;
            }
开发者ID:Ermelber,项目名称:EveryFileExplorer,代码行数:28,代码来源:CMDL.cs

示例6: Bone

                public Single[] WorldMatrix; //4x3

                #endregion Fields

                #region Constructors

                public Bone(EndianBinaryReader er)
                {
                    NameOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32();
                    Flags = (BoneFlags)er.ReadUInt32();
                    JointID = er.ReadUInt32();
                    ParentID = er.ReadInt32();
                    if (ParentID == -1) ParentOffset = er.ReadUInt32();
                    else ParentOffset = (UInt32)(er.BaseStream.Position + er.ReadInt32());
                    ChildOffset = er.ReadUInt32();
                    if (ChildOffset != 0) ChildOffset += (UInt32)(er.BaseStream.Position - 4);
                    PreviousSiblingOffset = er.ReadUInt32();
                    if (PreviousSiblingOffset != 0) PreviousSiblingOffset += (UInt32)(er.BaseStream.Position - 4);
                    NextSiblingOffset = er.ReadUInt32();
                    if (NextSiblingOffset != 0) NextSiblingOffset += (UInt32)(er.BaseStream.Position - 4);
                    Scale = new Vector3(er.ReadSingle(), er.ReadSingle(), er.ReadSingle());
                    Rotation = new Vector3(er.ReadSingle(), er.ReadSingle(), er.ReadSingle());
                    Translation = new Vector3(er.ReadSingle(), er.ReadSingle(), er.ReadSingle());
                    LocalMatrix = er.ReadSingles(4 * 3);
                    WorldMatrix = er.ReadSingles(4 * 3);
                    InverseBaseMatrix = er.ReadSingles(4 * 3);
                    BillboardMode = (BBMode)er.ReadUInt32();
                    Unknown6 = er.ReadUInt32();
                    Unknown7 = er.ReadUInt32();

                    long curpos = er.BaseStream.Position;
                    er.BaseStream.Position = NameOffset;
                    Name = er.ReadStringNT(Encoding.ASCII);
                    er.BaseStream.Position = curpos;
                }
开发者ID:Ermelber,项目名称:EveryFileExplorer,代码行数:35,代码来源:CMDL.cs

示例7: SkeletonCtr

            public SkeletonCtr(EndianBinaryReader er)
            {
                Type = er.ReadUInt32();
                Signature = er.ReadString(Encoding.ASCII, 4);
                if (Signature != "SOBJ") throw new SignatureNotCorrectException(Signature, "SOBJ", er.BaseStream.Position);
                Revision = er.ReadUInt32();
                NameOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32();
                Unknown2 = er.ReadUInt32();
                Unknown3 = er.ReadUInt32();
                NrBones = er.ReadUInt32();
                BoneDictionaryOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32();
                RootBoneOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32();
                ScalingRule = (SkeletonScalingRule)er.ReadUInt32();
                Flags = (SkeletonFlags)er.ReadUInt32();

                long curpos = er.BaseStream.Position;
                er.BaseStream.Position = NameOffset;
                Name = er.ReadStringNT(Encoding.ASCII);
                er.BaseStream.Position = BoneDictionaryOffset;
                BoneDictionary = new DICT(er);
                Bones = new Bone[NrBones];
                for (int i = 0; i < NrBones; i++)
                {
                    er.BaseStream.Position = BoneDictionary[i].DataOffset;
                    Bones[i] = new Bone(er);
                }
                er.BaseStream.Position = curpos;
            }
开发者ID:Ermelber,项目名称:EveryFileExplorer,代码行数:28,代码来源:CMDL.cs

示例8: MeshNodeVisibilityMember

 public MeshNodeVisibilityMember(EndianBinaryReader er)
     : base(er)
 {
     NodeNameOffset = (uint)er.BaseStream.Position + er.ReadUInt32();
     long curpos = er.BaseStream.Position;
     er.BaseStream.Position = NodeNameOffset;
     NodeName = er.ReadStringNT(Encoding.ASCII);
     er.BaseStream.Position = curpos;
 }
开发者ID:Ermelber,项目名称:EveryFileExplorer,代码行数:9,代码来源:CMDL.cs

示例9: SHDR

                public SHDR(EndianBinaryReader er)
                {
                    Type = er.ReadUInt32();
                    Signature = er.ReadString(Encoding.ASCII, 4);
                    if (Signature != "SHDR") throw new SignatureNotCorrectException(Signature, "SHDR", er.BaseStream.Position);
                    Revision = er.ReadUInt32();
                    NameOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32();
                    Unknown2 = er.ReadUInt32();
                    Unknown3 = er.ReadUInt32();
                    LinkedShaderNameOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32();
                    Unknown4 = er.ReadUInt32();

                    long curpos = er.BaseStream.Position;
                    er.BaseStream.Position = NameOffset;
                    Name = er.ReadStringNT(Encoding.ASCII);
                    er.BaseStream.Position = LinkedShaderNameOffset;
                    LinkedShaderName = er.ReadStringNT(Encoding.ASCII);
                    er.BaseStream.Position = curpos;
                }
开发者ID:Ermelber,项目名称:EveryFileExplorer,代码行数:19,代码来源:CMDL.cs

示例10: ReferenceLookupTableCtr

                            public ReferenceLookupTableCtr(EndianBinaryReader er)
                            {
                                Type = er.ReadUInt32();
                                BinaryPathOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32();
                                TableNameOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32();
                                TargetLUTOffset = er.ReadUInt32();
                                if (TargetLUTOffset != 0) TargetLUTOffset += (UInt32)er.BaseStream.Position - 4;

                                long curpos = er.BaseStream.Position;
                                er.BaseStream.Position = BinaryPathOffset;
                                BinaryPath = er.ReadStringNT(Encoding.ASCII);
                                er.BaseStream.Position = TableNameOffset;
                                TableName = er.ReadStringNT(Encoding.ASCII);
                                er.BaseStream.Position = curpos;
                            }
开发者ID:Ermelber,项目名称:EveryFileExplorer,代码行数:15,代码来源:CMDL.cs

示例11: MTOB

            public MTOB(EndianBinaryReader er)
            {
                Type = er.ReadUInt32();
                Signature = er.ReadString(Encoding.ASCII, 4);
                if (Signature != "MTOB") throw new SignatureNotCorrectException(Signature, "MTOB", er.BaseStream.Position);
                Revision = er.ReadUInt32();
                NameOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32();
                Unknown2 = er.ReadUInt32();
                Unknown3 = er.ReadUInt32();
                Flags = (MaterialFlags)er.ReadUInt32();
                TexCoordConfig = er.ReadUInt32();
                TranslucencyKind = er.ReadUInt32();
                MaterialColor = new MaterialColorCtr(er);
                Rasterization = new RasterizationCtr(er);
                FragmentOperation = new FragmentOperationCtr(er);
                NrActiveTextureCoordiators = er.ReadUInt32();
                TextureCoordiators = new TextureCoordinatorCtr[3];
                TextureCoordiators[0] = new TextureCoordinatorCtr(er);
                TextureCoordiators[1] = new TextureCoordinatorCtr(er);
                TextureCoordiators[2] = new TextureCoordinatorCtr(er);
                TexMapper0Offset = er.ReadUInt32();
                if (TexMapper0Offset != 0) TexMapper0Offset += (UInt32)er.BaseStream.Position - 4;
                TexMapper1Offset = er.ReadUInt32();
                if (TexMapper1Offset != 0) TexMapper1Offset += (UInt32)er.BaseStream.Position - 4;
                TexMapper2Offset = er.ReadUInt32();
                if (TexMapper2Offset != 0) TexMapper2Offset += (UInt32)er.BaseStream.Position - 4;
                ProcTexMapperOffset = er.ReadUInt32();
                if (ProcTexMapperOffset != 0) ProcTexMapperOffset += (UInt32)er.BaseStream.Position - 4;
                ShaderOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32();
                FragmentShaderOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32();
                ShaderProgramDescriptionIndex = er.ReadUInt32();
                NrShaderParameters = er.ReadUInt32();
                ShaderParametersOffsetArrayOffset = er.ReadUInt32();
                LightSetIndex = er.ReadUInt32();
                FogIndex = er.ReadUInt32();
                ShadingParameterHash = er.ReadUInt32();
                ShaderParametersHash = er.ReadUInt32();
                TextureCoordinatorsHash = er.ReadUInt32();
                TextureSamplersHash = er.ReadUInt32();
                TextureMappersHash = er.ReadUInt32();
                MaterialColorHash = er.ReadUInt32();
                RasterizationHash = er.ReadUInt32();
                FragmentLightingHash = er.ReadUInt32();
                FragmentLightingTableHash = er.ReadUInt32();
                FragmentLightingTableParametersHash = er.ReadUInt32();
                TextureCombinersHash = er.ReadUInt32();
                AlphaTestHash = er.ReadUInt32();
                FragmentOperationHash = er.ReadUInt32();
                MaterialId = er.ReadUInt32();

                long curpos = er.BaseStream.Position;
                er.BaseStream.Position = NameOffset;
                Name = er.ReadStringNT(Encoding.ASCII);
                if (TexMapper0Offset != 0)
                {
                    er.BaseStream.Position = TexMapper0Offset;
                    Tex0 = new TexInfo(er);
                }
                if (TexMapper1Offset != 0)
                {
                    er.BaseStream.Position = TexMapper1Offset;
                    Tex1 = new TexInfo(er);
                }
                if (TexMapper2Offset != 0)
                {
                    er.BaseStream.Position = TexMapper2Offset;
                    Tex2 = new TexInfo(er);
                }
                /*if (TexMapper3Offset != 0)
                {
                    er.BaseStream.Position = Tex3Offset;
                    Tex3 = new TexInfo(er);
                }*/
                //TODO: Procedural Texture Mapper
                er.BaseStream.Position = ShaderOffset;
                Shader = new SHDR(er);
                er.BaseStream.Position = FragmentShaderOffset;
                FragShader = new FragmentShader(er);
                er.BaseStream.Position = curpos;
            }
开发者ID:Ermelber,项目名称:EveryFileExplorer,代码行数:80,代码来源:CMDL.cs

示例12: MeshNodeVisibilityCtr

 public MeshNodeVisibilityCtr(EndianBinaryReader er)
 {
     NameOffset = (uint)er.BaseStream.Position + er.ReadUInt32();
     Visible = er.ReadUInt32() == 1;
     long curpos = er.BaseStream.Position;
     er.BaseStream.Position = NameOffset;
     Name = er.ReadStringNT(Encoding.ASCII);
     er.BaseStream.Position = curpos;
 }
开发者ID:Ermelber,项目名称:EveryFileExplorer,代码行数:9,代码来源:CMDL.cs

示例13: Mesh

            public Mesh(EndianBinaryReader er)
            {
                Type = er.ReadUInt32();
                Signature = er.ReadString(Encoding.ASCII, 4);
                if (Signature != "SOBJ") throw new SignatureNotCorrectException(Signature, "SOBJ", er.BaseStream.Position);
                Revision = er.ReadUInt32();
                NameOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32();
                Unknown2 = er.ReadUInt32();
                Unknown3 = er.ReadUInt32();
                ShapeIndex = er.ReadUInt32();
                MaterialIndex = er.ReadUInt32();
                OwnerModelOffset = (uint)(er.ReadInt32() + (UInt32)er.BaseStream.Position);
                IsVisible = er.ReadByte() == 1;
                RenderPriority = er.ReadByte();
                MeshNodeVisibilityIndex = er.ReadInt16();
                Unknown8 = er.ReadUInt32();
                Unknown9 = er.ReadUInt32();
                Unknown10 = er.ReadUInt32();
                Unknown11 = er.ReadUInt32();
                Unknown12 = er.ReadUInt32();
                Unknown13 = er.ReadUInt32();
                Unknown14 = er.ReadUInt32();
                Unknown15 = er.ReadUInt32();
                Unknown16 = er.ReadUInt32();
                Unknown17 = er.ReadUInt32();
                Unknown18 = er.ReadUInt32();
                Unknown19 = er.ReadUInt32();
                Unknown20 = er.ReadUInt32();
                Unknown21 = er.ReadUInt32();
                Unknown22 = er.ReadUInt32();
                Unknown23 = er.ReadUInt32();
                Unknown24 = er.ReadUInt32();
                Unknown25 = er.ReadUInt32();
                MeshNodeNameOffset = er.ReadUInt32();
                if (MeshNodeNameOffset != 0) MeshNodeNameOffset += (UInt32)er.BaseStream.Position - 4;
                Unknown27 = er.ReadUInt32();
                Unknown28 = er.ReadUInt32();
                Unknown29 = er.ReadUInt32();
                Unknown30 = er.ReadUInt32();
                //Unknown31 = er.ReadUInt32();

                long curpos = er.BaseStream.Position;
                er.BaseStream.Position = NameOffset;
                Name = er.ReadStringNT(Encoding.ASCII);
                if (MeshNodeNameOffset != 0)
                {
                    er.BaseStream.Position = MeshNodeNameOffset;
                    MeshNodeName = er.ReadStringNT(Encoding.ASCII);
                }
                er.BaseStream.Position = curpos;
            }
开发者ID:Ermelber,项目名称:EveryFileExplorer,代码行数:51,代码来源:CMDL.cs

示例14: TextureSamplerMember

 public TextureSamplerMember(EndianBinaryReader er)
     : base(er)
 {
     MaterialNameOffset = (uint)er.BaseStream.Position + er.ReadUInt32();
     TextureMapperIndex = er.ReadUInt32();
     long curpos = er.BaseStream.Position;
     er.BaseStream.Position = MaterialNameOffset;
     MaterialName = er.ReadStringNT(Encoding.ASCII);
     er.BaseStream.Position = curpos;
 }
开发者ID:Ermelber,项目名称:EveryFileExplorer,代码行数:10,代码来源:CMDL.cs

示例15: MaterialColorMember

 public MaterialColorMember(EndianBinaryReader er)
     : base(er)
 {
     MaterialNameOffset = (uint)er.BaseStream.Position + er.ReadUInt32();
     long curpos = er.BaseStream.Position;
     er.BaseStream.Position = MaterialNameOffset;
     MaterialName = er.ReadStringNT(Encoding.ASCII);
     er.BaseStream.Position = curpos;
 }
开发者ID:Ermelber,项目名称:EveryFileExplorer,代码行数:9,代码来源:CMDL.cs


注:本文中的EndianBinaryReader.ReadStringNT方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。