如何从 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'代码”
我正在创建一个指针并将其存储在本机哈希映射中,但是在取回值时如何将其转换回我的结构?
我是这样创建的:
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'代码”