public static String StrFromPtr(IntPtr ptr) { var strBytes = new List<byte>(); var off = 0; while (true) { var ch = Marshal.ReadByte(ptr, off++); if (ch == 0) break; strBytes.Add(ch); } return Encoding.UTF8.GetString(strBytes.ToArray()); }