private static unsafe String GetMaterialString(byte[] matPropData) { if (matPropData == null) { return(String.Empty); fixed(byte *ptr = &matPropData[0]) { //String is stored as 32 bit length prefix THEN followed by zero-terminated UTF8 data (basically need to reconstruct an AiString) AiString aiString; aiString.Length = new UIntPtr((uint)MemoryHelper.Read <int>(new IntPtr(ptr))); //Memcpy starting at dataPtr + sizeof(int) for length + 1 (to account for null terminator) MemoryHelper.CopyMemory(new IntPtr(aiString.Data), MemoryHelper.AddIntPtr(new IntPtr(ptr), sizeof(int)), (int)aiString.Length.ToUInt32() + 1); return(aiString.GetString()); } }