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# 前端处理它!?
您可以使用 unchecked
运算符进行常量赋值:
uint state = unchecked((uint) -1);
从 C# 规范第 7.6.12 节:
checked
和unchecked
运算符用于控制积分类型算术运算符和转换的溢出检查上下文。。
对于常量表达式(可在编译时完全计算的表达式),默认的溢出检查上下文始终
checked
。除非将常量表达式显式放置在unchecked
上下文中,否则在表达式的编译时计算期间发生的溢出始终会导致编译时错误。