如何检查给定地址是 32 位还是 64 位?

Posted

技术标签:

【中文标题】如何检查给定地址是 32 位还是 64 位?【英文标题】:How can I check if a given address is 32-bit or 64-bit? 【发布时间】:2021-12-10 00:42:13 【问题描述】:

如何检查长变量中的地址值是32位还是64位

例子:

long a = 0x06000000
long b = 0x13FFF0000

如何以编程方式检查这些地址的位数?

【问题讨论】:

32 位地址也是 64 位地址,因为 0x1 和 0x00000001 是同一个数字和同一个地址。您的意思是检查您的进程是否在 64 位模式下运行?或者您的意思是查看给定数字是否适合 32 位寄存器? 如果您的应用在 Windows 上作为 32 位进程运行,则它根本无法访问 64 位内存。 WOW64 层会阻止它。 @MiguelVentura 第二个选项 【参考方案1】:

您可以使用 AND 运算来检查是否设置了高 32 位。假设你有ulong,因为地址不是负数:

if ((x & 0xFFFFFFFF00000000UL) == 0)
    Console.WriteLine("x would fit into 32 bit");

【讨论】:

以上是关于如何检查给定地址是 32 位还是 64 位?的主要内容,如果未能解决你的问题,请参考以下文章

如何测试 Windows DLL 文件以确定它是 32 位还是 64 位? [复制]

检查正在运行的进程是 32 位还是 64 位

检查非托管 DLL 是 32 位还是 64 位?

检查非托管 DLL 是 32 位还是 64 位?

如何检查内存地址在 C 中是不是为 32 位对齐

如何确定安装的 Eclipse 是 32 位还是 64 位版本?