在C#中,IntPtr
和string
之间的转换可以通过使用Marshal
类来实现
- 将
IntPtr
转换为string
:
using System; using System.Runtime.InteropServices; class Program { static void Main() { IntPtr intPtr = /* 获取一个有效的IntPtr */; string str = Marshal.PtrToStringAnsi(intPtr); Console.WriteLine("Converted string: " + str); } }
这里使用了Marshal.PtrToStringAnsi()
方法,它将一个指向以null结尾的ANSI字符串的IntPtr
转换为string
。如果你的字符串是Unicode编码的,可以使用Marshal.PtrToStringUni()
方法。
- 将
string
转换为IntPtr
:
using System; using System.Runtime.InteropServices; class Program { static void Main() { string str = "Hello, World!"; IntPtr intPtr = Marshal.StringToHGlobalAnsi(str); // 使用intPtr... // 最后释放内存 Marshal.FreeHGlobal(intPtr); } }
这里使用了Marshal.StringToHGlobalAnsi()
方法,它将一个string
转换为一个指向以null结尾的ANSI字符串的IntPtr
。如果你需要将字符串转换为Unicode编码,可以使用Marshal.StringToHGlobalUni()
方法。在使用完IntPtr
后,记得调用Marshal.FreeHGlobal()
方法释放内存。