C DWORD 的 C# 等价物是什么?

新手上路,请多包涵

经过搜索,我听说 UInt32 是 C# 的 C++ DWORD 等价物。我通过执行算术测试结果

*(DWORD*)(1 + 0x2C) //C++
(UInt32)(1 + 0x2C) //C#

它们产生完全不同的结果。有人可以告诉我 C# 中 DWORD 的正确匹配吗?

原文由 Newbie 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

您的示例使用 DWORD 作为指针,这很可能是无效指针。我假设您的意思是 DWORD 本身。

DWORD 定义为 unsigned long ,它最终是一个 32 位无符号整数。

uint ( System.UInt32 ) 应该是匹配的。

 #import <stdio.h>

// I'm on macOS right now, so I'm defining DWORD
// the way that Win32 defines it.
typedef unsigned long DWORD;

int main() {
    DWORD d = (DWORD)(1 + 0x2C);
    int i = (int)d;
    printf("value: %d\n", i);
    return 0;
}

输出:45

 public class Program
{
    public static void Main()
    {
        uint d = (uint)(1 + 0x2C);
        System.Console.WriteLine("Value: {0}", d);
    }
}

输出:45

原文由 Stephen Jennings 发布,翻译遵循 CC BY-SA 4.0 许可协议

你的两个片段做了完全不同的事情。在您的 C++ 代码中,出于某种奇怪的原因,您将值 (1 + 0x2C) (写 45 的一种奇怪方式) 转换为 DWORD* ,然后取消引用它,就好像那个地址实际上是一个有效的内存位置。使用 C#,您只需在整数类型之间进行转换。

原文由 Benjamin Lindley 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题