2013-10-04 44 views
0

C++:DWORD dwState = (DWORD)-1;C#UInt vs Cpp DWORD與負值衝突

這裏沒有問題。

C#:uint state = -1;

這裏,被認爲是DWORD的等價物的uint或UInt32不能具有負值,並且拋出異常。

值是太大或太小,以UInt32

我具有同時讀取從CPP和C#程序此值(被存儲在DB)的碼。 Cpp將無效狀態標記爲-1。因此我無法使用uint類型從C#front讀取它。 我不能在C++程序中改變這種類型。除了-1之外,cpp可以爲0到65536之間的任何值寫入變量。

我該如何處理它從C#正面!?

回答

2

我該如何處理它從C#front!?

可以使用unchecked運營商的不斷分配:

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

從C#規範第7.6.12:

checkedunchecked運營商來控制溢出檢查上下文用於整型算術運算符和轉換。

...

對於常量表達式(即可以在編譯時完全計算表達式),默認的溢出檢查上下文總是checked。除非上下文中明確指定了常量表達式,否則在對錶達式進行編譯時評估期間發生的溢出通常會導致編譯時錯誤。

+0

儘管這不會引發任何異常,但狀態值不會變爲-1,而在C++中則不是這樣。 – AKN