如何从 C# 中的指针地址获取值?

How to get the value from my pointer address in C#?

我正在创建一个指针并将其存储在本机哈希映射中,但是在取回值时如何将其转换回我的结构?

我是这样创建的:

T* p = &myStruct;
hashMap.Add(myStruct, (int)p); //<MyStruct,int>

现在回读我正在尝试做的事情:

if(hashMap.TryGetValue(item, out int ptr)){

    T myStruct = *ptr; // don't know the right syntax here

    Debug.Log(myStruct.Equals(item)); // should be the same
}

我不能使用 IntPtr 因为我不能使用 Marshal.PtrToStructure。 Unity 的编译器不允许在其线程内使用它。

你很接近,但你到达那里的 int ptr 仍然是一个 int 地址 ,而不是指针!

我想你要找的应该是

 T myStruct = *((T*)ptr);

所以首先将地址转换回指针,然后取消引用它。

括号是多余的,只是觉得这样更容易理解。你也可以这样做

T myStruct = *(T*)ptr;

或步骤

if(hashMap.TryGetValue(item, out int addr))
{
    T* ptr = (T*)addr;
    T myStruct = *ptr;

    Debug.Log(myStruct.Equals(item));
}

我只想在这里补充一点,如果您在编译设置中勾选“允许不安全代码”选项,我认为您可以使用Marshal.PtrToStructure。前往:

编辑>项目设置>播放器>其他设置>脚本编译>“允许'unsafe'代码”