首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C++ DWORD的C#等价物是什么?

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

Stack Overflow用户
提问于 2016-10-10 12:51:05
回答 3查看 20.9K关注 0票数 8

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

代码语言:javascript
代码运行次数:0
运行
复制
*(DWORD*)(1 + 0x2C) //C++
(UInt32)(1 + 0x2C) //C#

它们会产生完全不同的结果。有没有人能告诉我C#中的DWORD的正确匹配项?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-10 13:07:11

您的示例使用DWORD作为指针,这很可能是一个无效的指针。我猜你指的是DWORD本身。

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

uint (System.UInt32)应匹配。

代码语言:javascript
代码运行次数:0
运行
复制
#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

代码语言:javascript
代码运行次数:0
运行
复制
public class Program
{
    public static void Main()
    {
        uint d = (uint)(1 + 0x2C);
        System.Console.WriteLine("Value: {0}", d);
    }
}

输出: 45

票数 9
EN

Stack Overflow用户

发布于 2016-10-10 13:04:51

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

票数 0
EN

Stack Overflow用户

发布于 2016-10-10 13:08:32

来自微软的DWord定义:

类型定义f unsigned long DWORD,*PDWORD,*LPDWORD;https://msdn.microsoft.com/en-us/library/cc230318.aspx

来自微软的Uint32定义

类型定义函数unsigned int UINT32;https://msdn.microsoft.com/en-us/library/cc230386.aspx

现在你可以看到区别了.一个是unsigned long,另一个是unsigned int

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39951473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档