C#UInt vs Cpp DWORD与负值冲突

时间:2013-10-04 14:41:15

标签: c# dword uint32

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

这里没有问题。

C#:uint state = -1;

这里,uint或UInt32被认为是DWORD的等价物,不能有负值,它会抛出异常。

对于UInt32

,值太大或太小

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

如何从C#前端处理它??

1 个答案:

答案 0 :(得分:2)

  

如何从C#前端处理它??

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

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

来自C#规范部分7.6.12:

  

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

     

...

     

对于常量表达式(可在编译时完全求值的表达式),默认溢出检查上下文始终为checked。除非在unchecked上下文中明确放置常量表达式,否则在表达式的编译时评估期间发生的溢出总是会导致编译时错误。