如何在C#中将UIntPtr对象转换为IntPtr?
我需要在我的C#.NET 2.0应用程序中将UIntPtr
对象转换为IntPtr
对象。 如何实现这一目标? 我不认为它就像这样简单:
UIntPtr _myUIntPtr = /* Some initializer value. */ object _myObject = (object)_myUIntPtr; IntPtr _myIntPtr = (IntPtr)_myObject;
这应该适用于x86和x64
IntPtr intPtr = unchecked((IntPtr)(long)(ulong)uintPtr);
这应该适用于32位操作系统:
IntPtr intPtr = (IntPtr)(int)(uint)uintPtr;
也就是说,将UIntPtr转换为uint,将其转换为int,然后将其转换为IntPtr。
优点是抖动会优化所有转换,并简单地将其转换为将一个值直接分配给另一个,但我实际上没有测试过。
有关适用于64位操作系统的解决方案,请参阅Jared的答案。
UIntPtr _myUIntPtr = / *一些初始化值。 * / void * ptr = _myUIntPtr.ToPointer(); IntPtr _myIntPtr = new IntPtr(ptr);