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


C# Header.CalculateCRC方法代码示例

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


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

示例1: Write

        public byte[] Write(object root)
        {
            using (this.Writer = new BinaryWriter(Stream))
            {
                this.Magic = InitMagic();
                WriteMagic(Magic);

                this.Header = InitHeader();
                WriteHeader(Header);

                for (int i = 0; i < Header.numSections; i++)
                {
                    var section = new WritableSection((SectionType)i, this);
                    WriteSectionHeader(section.Header);
                    Sections.Add(section);
                }

                Magic.headersSize = (UInt32)Stream.Position;

                CurrentSection = Sections[(int)SectionType.Main];
                CurrentSection.WriteStruct(root);

                while (ArrayWrites.Count > 0 || StructWrites.Count > 0 || StringWrites.Count > 0)
                {
                    FlushPendingWrites();
                }

                foreach (var defn in Types.Values)
                {
                    Sections[(int)SectionType.Discardable].WriteStructDefinition(defn);
                }

                // We need to do this again to flush strings written by WriteMemberDefinition()
                FlushPendingWrites();

                FinalizeOffsets();

                foreach (var section in Sections)
                {
                    section.Header.first16bit = (UInt32)section.MainStream.Length;
                    section.Header.first8bit = (UInt32)section.MainStream.Length;
                    section.Finish();
                }

                var relocSection = Sections[(int)SectionType.Discardable];
                foreach (var section in Sections)
                {
                    relocSection.WriteSectionRelocations(section);
                    relocSection.WriteSectionMixedMarshallingRelocations(section);
                }

                foreach (var section in Sections)
                {
                    // Pad section size to a multiple of 4
                    while (section.MainStream.Position % 4 > 0)
                        section.Writer.Write((Byte)0);

                    section.MainStream.Flush();
                    section.Header.offsetInFile = (UInt32)Stream.Position;
                    section.Header.uncompressedSize = (UInt32)section.MainStream.Length;
                    section.Header.compressedSize = (UInt32)section.MainStream.Length;
                    Writer.Write(section.MainStream.ToArray());
                }

                foreach (var section in Sections)
                {
                    section.Header.relocationsOffset += relocSection.Header.offsetInFile;
                    section.Header.mixedMarshallingDataOffset += relocSection.Header.offsetInFile;
                }

                var rootStruct = LookupStructDefinition(root.GetType());
                Header.rootType = ObjectOffsets[rootStruct];
                Header.rootNode = new SectionReference(SectionType.Main, 0);
                Header.fileSize = (UInt32)Stream.Length;

                Stream.Seek(Magic.MagicSize + Header.HeaderSize, SeekOrigin.Begin);

                foreach (var section in Sections)
                {
                    WriteSectionHeader(section.Header);
                }

                Header.crc = Header.CalculateCRC(Stream);
                Stream.Seek(0, SeekOrigin.Begin);
                WriteMagic(Magic);
                WriteHeader(Header);

                return Stream.ToArray();
            }
        }
开发者ID:Norbyte,项目名称:lslib,代码行数:90,代码来源:Writer.cs

示例2: ReadHeader

        private Header ReadHeader()
        {
            var header = new Header();
            header.version = InputReader.ReadUInt32();
            header.fileSize = InputReader.ReadUInt32();
            header.crc = InputReader.ReadUInt32();
            header.sectionsOffset = InputReader.ReadUInt32();
            header.numSections = InputReader.ReadUInt32();
            header.rootType = ReadSectionReferenceUnchecked();
            header.rootNode = ReadSectionReferenceUnchecked();
            header.tag = InputReader.ReadUInt32();
            header.extraTags = new UInt32[Header.ExtraTagCount];
            for (int i = 0; i < Header.ExtraTagCount; i++)
                header.extraTags[i] = InputReader.ReadUInt32();
            header.stringTableCrc = InputReader.ReadUInt32();
            header.reserved1 = InputReader.ReadUInt32();
            header.reserved2 = InputReader.ReadUInt32();
            header.reserved3 = InputReader.ReadUInt32();

            if (header.version != Header.Version)
                throw new ParsingException(String.Format("Unsupported GR2 version; expected {0}, got {1}", Header.Version, header.version));

            // if (header.tag != Header.Tag)
            //    throw new ParsingException(String.Format("Incorrect header tag; expected {0:X8}, got {1:X8}", Header.Tag, header.tag));

            Debug.Assert(header.fileSize <= InputStream.Length);
            Debug.Assert(header.CalculateCRC(InputStream) == header.crc);
            Debug.Assert(header.sectionsOffset == Header.HeaderSize);
            Debug.Assert(header.rootType.Section < header.numSections);
            // TODO: check rootTypeOffset after serialization
            Debug.Assert(header.stringTableCrc == 0);
            Debug.Assert(header.reserved1 == 0);
            Debug.Assert(header.reserved2 == 0);
            Debug.Assert(header.reserved3 == 0);

#if DEBUG_GR2_SERIALIZATION
            System.Console.WriteLine(" ===== GR2 Header ===== ");
            System.Console.WriteLine(String.Format("Version {0}, Size {1}, CRC {2:X8}", header.version, header.fileSize, header.crc));
            System.Console.WriteLine(String.Format("Offset of sections: {0}, num sections: {1}", header.sectionsOffset, header.numSections));
            System.Console.WriteLine(String.Format("Root type section {0}, Root type offset {1:X8}", header.rootType.Section, header.rootType.Offset));
            System.Console.WriteLine(String.Format("Root node section {0} {1:X8}", header.rootNode.Section, header.rootNode.Offset));
            System.Console.WriteLine(String.Format("Tag: {0:X8}, Strings CRC: {1:X8}", header.tag, header.stringTableCrc));
            System.Console.WriteLine(String.Format("Extra tags: {0:X8} {1:X8} {2:X8} {3:X8}", header.extraTags[0], header.extraTags[1], header.extraTags[2], header.extraTags[3]));
            System.Console.WriteLine(String.Format("Reserved: {0:X8} {1:X8} {2:X8}", new object[] { header.reserved1, header.reserved2, header.reserved3 }));
#endif

            return header;
        }
开发者ID:Norbyte,项目名称:lslib,代码行数:48,代码来源:Reader.cs


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