2013-07-15 74 views
1

我對C#編碼有點新,我最近遇到了一個問題,我想要求您的幫助。 我從下面的鏈接中獲得這段代碼。錯誤不能將類型'int'隱式轉換爲'uint'。存在明確的轉換(您是否缺少演員?)

http://pastebin.com/5jQe5tQs

我的問題是在終點線:

uint num = ((string_0[0] | (string_0[1] << 8)) | 
      (string_0[2] << 0x10)) | (string_0[3] << 0x18); 

在那裏我得到這個錯誤:

Cannot implicitly convert type 'int' to 'uint'. An explicit conversion exists (are you missing a cast?)

據我所知,讀我看到的問題是從哪裏來的對於int值,爲int值賦值太大。 但是,從我的小經驗,我不知道什麼變量的價值是不正確的格式。 更有建議的專家可以幫助我解決問題嗎?

回答

3

表達

((string_0[0] | (string_0[1] << 8)) | (string_0[2] << 0x10)) | (string_0[3] << 0x18) 

的結果是一個int。你正在將它放入uint。只需使numint,或將表達式轉換爲uint

會發生什麼情況是,當您使用[]運算符取消字符串的一部分時,將獲取char。因爲chardo not exist的移位運算符,該值將被隱式升級到int(升級沒有問題,因爲沒有準確性損失的風險)。所以這部分(與其他人一樣):

(string_0[1] << 8) 

返回int

+0

OK已經注意到之前,但如果我從uint更改爲int int,我有num2上的下一個錯誤。無法從'int'轉換爲'uint'如果我從uint num2 = metoda6(num,uint_0,uint_1)更改num2;到int num2 = metoda6(num,uint_0,uint_1);我得到了一個新的錯誤:'WindowsFormsApplication1.Form1.metoda6(uint,uint,uint)'的最佳重載方法匹配有一些無效參數這裏是整個項目(C#)VS2010 http://www70.zippyshare.com/v /45354586/file.html –

+0

你總是可以使用'(int)'明確地進行轉換。 –

相關問題