如何在C#中将UIntPtr对象转换为IntPtr?

时间:2010-09-21 15:57:35

标签: c# object casting

我需要在我的C#.NET 2.0应用程序中将UIntPtr对象转换为IntPtr的对象。如何实现这一目标?我不认为它就像这样简单:

UIntPtr _myUIntPtr = /* Some initializer value. */
object _myObject = (object)_myUIntPtr;
IntPtr _myIntPtr = (IntPtr)_myObject;

3 个答案:

答案 0 :(得分:15)

这应该适用于x86和x64

IntPtr intPtr = unchecked((IntPtr)(long)(ulong)uintPtr);

答案 1 :(得分:2)

这适用于32位操作系统:

IntPtr intPtr = (IntPtr)(int)(uint)uintPtr;

也就是说,将UIntPtr转换为uint,将其转换为int,然后将其转换为IntPtr。

优点是抖动会优化所有转换并简单地将其转换为将一个值直接分配给另一个,但我实际上没有测试过。

请参阅Jared的答案,了解适用于64位操作系统的解决方案。

答案 2 :(得分:0)

UIntPtr _myUIntPtr = /* Some initializer value. */ 
void* ptr = _myUIntPtr.ToPointer();
IntPtr _myIntPtr = new IntPtr(ptr);