首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C++中将无符号长整型(DWORD)重新解释为有符号长整型?

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

Stack Overflow用户
提问于 2011-07-15 23:22:07
回答 2查看 5.9K关注 0票数 5

我想将unsigned long (实际上是DWORD)重新解释为signed long。我试过了:

代码语言:javascript
复制
DWORD x;
long y = reinterpret_cast<signed long>(x);

然而,VC++2010智能提示告诉我“无效的类型转换”。为什么?我该如何修复它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-15 23:24:14

请尝试使用static_cast。如果您尝试过度许可的强制转换(比如在static_cast或const_cast就足够时使用reinterpret_cast ),VC会生成一个错误。

C++中有5种类型的强制转换,每种类型都允许您执行更多操作(授予更多权限)。最不允许的强制转换是常量强制转换(const_cast<int>(<const int>)),它允许您更改常量修饰符。静态类型转换(static_cast<int>)(<short>))允许您执行类型安全强制转换(例如,从基础类型转换为派生类型).There是动态类型转换(dynamic_cast<derived_type>(base_type),如果两者之间存在合法转换,则允许您从一种类型转换为另一种类型,如果没有转换,则返回null )。最后,还有一些类型转换允许在不相关的类型之间进行转换-- reinterpret_cast reinterpret_cast<int>(<void *>)和C样式转换(int)<void *>

我没有一个好的方法来描述这些不同类型的强制转换,所以我将它们描述为“更宽松的”,因为它们每一个都允许你做更多的事情。

如果您正在使用重新解释强制转换,则VC会警告您,其他强制转换类型中的一个可能更适合实现您的目标。C风格的类型转换没有类似的向后兼容性警告。

票数 8
EN

Stack Overflow用户

发布于 2011-07-15 23:23:48

您不需要使用reinterpret_cast将无符号类型转换为有符号类型,static_cast就可以了。

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

https://stackoverflow.com/questions/6709356

复制
相关文章

相似问题

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