草庐IT

c++ - 如何在 C++ 中将无符号长整数 (DWORD) 重新解释为有符号长整数?

我想将unsignedlong(实际上是DWORD)重新解释为signedlong。我试过:DWORDx;longy=reinterpret_cast(x);但是,VC++2010intellisense告诉我“类型转换无效”。为什么?我该如何解决? 最佳答案 您不需要reinterpret_cast将无符号类型转换为有符号类型,static_cast即可。 关于c++-如何在C++中将无符号长整数(DWORD)重新解释为有符号长整数?,我们在StackOverflow上找到一个类似的问

c++ - 将 DWORD 显式初始化为 1,但调试器显示超出范围的值

我对这个问题有点吃惊-在Debug模式下根本不会出现这个问题,但在Release模式下感觉我几乎无能为力来解决它。这是VS2013内部发生的事情的屏幕截图:我初始化nResult为1L,内部显示为3422785012,在Debug模式下,这个值确实是1L。关于为什么显示的值甚至不接近我为nResult设置的初始值有什么想法吗?我试过使用编译器设置-在Debug模式下这段代码运行良好。 最佳答案 您的代码很可能已优化。这意味着编译器以您的源代码与编译器生成的内容不匹配的方式移动和删除了代码。要么调试未优化的代码,要么在充分了解源代码可

java - C++中的DWORD数据类型及其在Java中的转换

我想将C++代码转换成Java,因此,应该使用哪种Java数据类型来替换VC++中的DWORD数据类型? 最佳答案 如果您只需要一个32位值,您可以使用int。如果您需要执行算术运算或打印值,您可以使用long代替。inti=/*32-bitvalue*/longl=i&0xFFFFFFFFL;可以使用long,因为它的值可以是0到2^32(以及更多) 关于java-C++中的DWORD数据类型及其在Java中的转换,我们在StackOverflow上找到一个类似的问题:

c++ - 如何返回一个不透明的句柄(void* 或 dword),它可以转换回存储在 boost::interprocess 映射中的值元素?

我对放置一个std::string键和一个大的struct值所涉及的堆和按值与按引用语义有点困惑放入像boost::interprocess::map这样的容器中。这是我的情况,以及我正在使用的一些类型定义:typedefstd::stringAreaKeyType;typedefDATA_AREA_DESCAreaMappedType;//DATA_AREA_DESCisabigstruct.typedefstd::pairAreaValueType;typedefboost::interprocess::allocatorAreaShmemAllocator;typedefboos

c++ - 如何使用 ifdef 检测是否支持 Windows DWORD_PTR 类型?

有somenewintegertypes在WindowsAPI中支持Win64。他们并不总是得到支持;例如theyaren'tpresentinMSVC6.我怎样才能写一个#if是否支持这些类型的检测条件?(我的代码需要在许多不同版本的MicrosoftVisualC++下编译,包括MSVC6。因此我需要提供我自己对这些类型的定义,并带有#if以在较新的编译器中禁用它们)。(对于搜索者,完整的类型列表是:DWORD_PTR、INT_PTR、LONG_PTR、UINT_PTR、ULONG_PTR) 最佳答案 宏MSC_VER是在[12

c - 我可以 #include 定义 DWORD 的最小 Windows header 是什么?

我有一个自己的小头文件,它声明了几个函数,其中一个函数的返回类型为DWORD.懒得拖了windows.h只是为了获得这种类型的官方定义,因为该文件很大,而且我的header将用于许多不需要它的源模块。当然,在实践中我知道DWORD只是unsignedint,但如果可能的话,我更喜欢包含官方头文件的更卫生的方法。关于thispage它说DWORD在windef.h中定义,但不幸的是,只包含这个小文件会直接导致编译错误——显然它希望被其他头文件包含。(此外,我的文件是头文件这一事实也意味着我不能只声明WIN32_LEAN_AND_MEAN,因为#includes我的文件的源文件可能需要将其

c# - 如何在设置了最高位的注册表中放入一个 DWORD

我遇到了一个奇怪的问题:当从我的C#应用程序中设置Windows注册表中的DWORD类型的值时,当最高位被设置时我总是收到错误。显然,有符号整数和无符号整数之间似乎存在某种转换问题。例子:当我做这样的事情时regKey.SetValue("Value",0x70000000u,RegistryValueKind.DWord);它工作正常。但是当我添加最高位时(因为我专门处理无符号整数,所以应该只是另一个值位),就像这样regKey.SetValue("Value",0xf0000000u,RegistryValueKind.DWord);我遇到异常(“值对象的类型与指定的Registr

c# - DWORD 应该映射到 int 还是 uint?

将WindowsAPI(包括数据类型)转换为P/Invoke时,我应该将DWORD替换为int还是uint?它通常是未签名的,但我看到人们到处都使用int(是否只是因为CLS警告?eventhe.NETFrameworkitself是this),所以我永远不确定哪个一个是正​​确的。 最佳答案 嗯accordingtotheMSDNDWORD是一个无符号整数,范围为0到4294967295。因此理想情况下,您应该将其替换为uint而不是int。但是,正如您所发现的,uint不符合CLS,因此如果您的方法公开可见,您应该使用int并进

Linux x86 NASM - 子例程 : Print a dword from EAX

这个问题在这里已经有了答案:HowdoIprintanintegerinAssemblyLevelProgrammingwithoutprintffromtheclibrary?(5个答案)关闭2年前。所以我正在学习使用NASM语法的x86Linux程序集(天哪,又不是这个,你们都在想)。我正在尝试制作一个子例程,它将简单地将EAX中的值打印到标准输出。代码运行并退出时没有错误,但没有打印任何内容。我不知道为什么。首先,这是我正在处理的文件:segment.bssto_print:resd1segment.textglobalprint_eax_valprint_eax_val:;(t

c++ - 32 位和 64 位代码的 DWORD 有多大?

在VisualC++中,DWORD只是一个无符号长整数,它依赖于机器、平台和SDK。但是,由于DWORD是双字(即2*16),那么在64位架构上,DWORD仍然是32位吗? 最佳答案 实际上,在32位计算机上,一个字是32位的,但DWORD类型是过去16位的遗留物。为了更容易将程序移植到新系统,微软决定所有旧类型都不会改变大小。您可以在此处找到官方列表:http://msdn.microsoft.com/en-us/library/aa383751(VS.85).aspx随着从32位转换到64位而发生变化的所有平台相关类型都以_PT