【问题标题】:C# UInt vs Cpp DWORD conflict with negative valuesC# UInt vs Cpp DWORD 与负值冲突
【发布时间】:2013-10-04 14:41:14
【问题描述】:

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

这里没有问题。

C#:uint state = -1;

这里,被认为相当于 DWORD 的 uint 或 UInt32 不能有负值,它会抛出异常。

值对于 UInt32 来说太大或太小

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

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

【问题讨论】:

    标签: c# dword uint32


    【解决方案1】:

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

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

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

    来自 C# 规范第 7.6.12 节:

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

    ...

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

    【讨论】:

    • 虽然这不会引发任何异常,但 state 的值不会更改为 -1,而在 C++ 中则不是这样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 2019-03-18
    相关资源
    最近更新 更多