C# UInt 与 Cpp DWORD 冲突,具有负值

本文关键字:冲突 UInt Cpp DWORD | 更新日期: 2023-09-27 18:34:07

C++: DWORD dwState = (DWORD)-1;

这里没有问题。

C#: uint state = -1 ;

在这里,uint 或 UInt32 被认为是 DWORD 的等效值不能具有负值,并且它抛出低于异常值。

对于 UInt32 来说,值太大或太小

我有一个代码可以从 cpp 和 c# 程序中读取此值(存储在数据库中)。Cpp 将无效状态标记为 -1。因此,我无法使用 uint 类型从 C# 前端读取它。我无法在c ++程序中更改此类型。除了 -1 之外,cpp 可以为变量写入 0-65536 之间的任何值。

我该如何从 C# 前端处理它!?

C# UInt 与 Cpp DWORD 冲突,具有负值

我该如何从 C# 前端处理它!?

您可以使用 unchecked 运算符进行常量赋值:

uint state = unchecked((uint) -1);

从 C# 规范第 7.6.12 节:

checkedunchecked运算符用于控制积分类型算术运算符和转换的溢出检查上下文

对于常量表达式(可在编译时完全计算的表达式),默认的溢出检查上下文始终checked 。除非将常量表达式显式放置在unchecked上下文中,否则在表达式的编译时计算期间发生的溢出始终会导致编译时错误。