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#前端处理它??
答案 0 :(得分:2)
如何从C#前端处理它??
您可以使用unchecked
运算符进行常量赋值:
uint state = unchecked((uint) -1);
来自C#规范部分7.6.12:
checked
和unchecked
运算符用于控制整数类算术运算符和转换的溢出检查上下文。...
对于常量表达式(可在编译时完全求值的表达式),默认溢出检查上下文始终为
checked
。除非在unchecked
上下文中明确放置常量表达式,否则在表达式的编译时评估期间发生的溢出总是会导致编译时错误。