public FNameEntrySerialized(string str, long fileOffset = 0)
 {
     this.FileOffset            = fileOffset;
     this.Name.Value            = str;
     this.NonCasePreservingHash = 0;
     this.CasePreservingHash    = (ushort)(UnrealCrc.StrCrc32(str) & 0xFFFF);
 }
        public FNameEntrySerialized(Stream stream)
        {
            this.FileOffset = stream.Position;
            using (BinaryReader br = new BinaryReader(stream, Encoding.UTF8, true))
            {
                this.Name = new FString(stream);
                if (this.Name.Value.Length > MaxNameSize)
                {
                    throw new InvalidDataException("Name longer than expected. Can not continue reading.");
                }
                this.NonCasePreservingHash = br.ReadUInt16();
                this.CasePreservingHash    = br.ReadUInt16();

                ushort hash = (ushort)(UnrealCrc.StrCrc32(this.Name) & 0xFFFF);
                if (CasePreservingHash != hash)
                {
                    throw new InvalidDataException($"Invalid Case Hash found in UObject: {this.Name}. Expected {hash:X4} but found {this.CasePreservingHash:X4}.");
                }
            }
        }