예제 #1
0
        private void FixNameFNV1A(ref CR2WName name)
        {
            var str  = m_dictionary[name.value];
            var hash = FNV1A32HashAlgorithm.HashString(str, Encoding.ASCII, true);

            name.hash = hash;
        }
예제 #2
0
 public CR2WName ToCR2WName()
 {
     return(new CR2WName
     {
         hash = FNV1A32HashAlgorithm.HashString(str),
         value = offset
     });
 }
예제 #3
0
        public ushort AddName(string value)
        {
            var hash  = FNV1A32HashAlgorithm.HashString(value);
            var index = names.FindIndex(n => n.hash == hash);

            if (index >= 0)
            {
                return(Convert.ToUInt16(index));
            }
            names.Add(new SName
            {
                offset = AddString(value),
                hash   = hash,
            });
            return(Convert.ToUInt16(names.Count - 1));
        }
예제 #4
0
 public void Write(BinaryWriter file)
 {
     file.Write(offset);
     file.Write(FNV1A32HashAlgorithm.HashString(str));
 }
예제 #5
0
        void GetNames()
        {
            names = new List <SName>();

            var start = tableheaders[1].Offset;
            var size  = tableheaders[1].Size;

            BaseStream.Seek(start, SeekOrigin.Begin);

            for (int i = 0; i < size; i++)
            {
                var o = ReadUInt32();
                var h = ReadUInt32();
                var v = strings[o];
                names.Add(new SName()
                {
                    Offset = o,
                    Hash   = h,
                    Value  = v,
                });
            }

            Writer.WriteLine("\n");
            Writer.WriteLine("\tTable  2");
            Writer.WriteLine("\tSize   {0}", size);
            Writer.WriteLine("\tOffset {0}", start);
            Writer.WriteLine("\n");
            Writer.WriteLine("|Offset    |Hash       |Computed   |Value");
            Writer.WriteLine("|----------|-----------|-----------|---------------------------");
            foreach (var r in names)
            {
                Writer.WriteLine("|{0,-10}|0x{1,-9:X8}|0x{2,-9:X8}|{3}", r.Offset, r.Hash, FNV1A32HashAlgorithm.HashString(r.Value, Encoding.ASCII, true), r.Value);
            }
        }
예제 #6
0
        void GetNames()
        {
            names = new List <SName>();

            var start = tableheaders[1].Offset;
            var size  = tableheaders[1].Size;

            BaseStream.Seek(start, SeekOrigin.Begin);

            for (int i = 0; i < size; i++)
            {
                var o = ReadUInt32();
                var h = ReadUInt32();
                var v = strings[o];
                names.Add(new SName()
                {
                    Offset = o,
                    Hash   = h,
                    Value  = v,
                });
            }

            Writer.WriteLine("\n");
            Writer.WriteLine("\tTable  2");
            Writer.WriteLine("\tSize   {0}", size);
            Writer.WriteLine("\tOffset {0}", start);
            Writer.WriteLine("\n");
            Writer.WriteLine("|Offset    |Hash           |Computed       |Value");
            Writer.WriteLine("|----------|---------------|---------------|---------------------------");
            foreach (var r in names)
            {
                Writer.WriteLine("|{0}|{1}|{2}|{3}", Convert.ToString(r.Offset).PadRight(10), $"0x{r.Hash:X}".PadRight(15), $"0x{FNV1A32HashAlgorithm.HashString(r.Value):X}".PadRight(15), r.Value);
            }
        }