如何将uint转换为int在C#中?
如何将uint转换为int在C#中?
鉴于:
uint n = 3; int i = checked((int)n); //throws OverflowException if n > Int32.MaxValue int i = unchecked((int)n); //converts the bits only //i will be negative if n > Int32.MaxValue int i = (int)n; //same behavior as unchecked 要么
 int i = Convert.ToInt32(n); //same behavior as checked 
– 编辑
包括由Kenan EK提及的信息
记下选中和未选中的关键字。
如果您希望将结果截断为int,或者如果结果不符合带符号的32位,则引发exception。 默认是未选中。
假设你只想从一个types中提取32位,并将它们原样转储到另一个types中:
 uint asUint = unchecked((uint)myInt); int asInt = unchecked((int)myUint); 
目标types将盲目地选取32位并重新解释它们。
相反,如果您更希望将小数/数值保持在目标types本身的范围内:
 uint asUint = checked((uint)myInt); int asInt = checked((int)myUint); 
在这种情况下,如果出现以下情况,将会发生溢出
- 将一个负的int(例如:-1)投射到一个uint
- 在2,147,483,648和4,294,967,295之间给出一个肯定的提示
 在我们的例子中,我们希望unchecked解决scheme保持原来的32位,所以这里有一些例子: 
例子
int => uint
 int....: 0000000000 (00-00-00-00) asUint.: 0000000000 (00-00-00-00) ------------------------------ int....: 0000000001 (01-00-00-00) asUint.: 0000000001 (01-00-00-00) ------------------------------ int....: -0000000001 (FF-FF-FF-FF) asUint.: 4294967295 (FF-FF-FF-FF) ------------------------------ int....: 2147483647 (FF-FF-FF-7F) asUint.: 2147483647 (FF-FF-FF-7F) ------------------------------ int....: -2147483648 (00-00-00-80) asUint.: 2147483648 (00-00-00-80) 
uint => int
 uint...: 0000000000 (00-00-00-00) asInt..: 0000000000 (00-00-00-00) ------------------------------ uint...: 0000000001 (01-00-00-00) asInt..: 0000000001 (01-00-00-00) ------------------------------ uint...: 2147483647 (FF-FF-FF-7F) asInt..: 2147483647 (FF-FF-FF-7F) ------------------------------ uint...: 4294967295 (FF-FF-FF-FF) asInt..: -0000000001 (FF-FF-FF-FF) ------------------------------ 
码
 int[] testInts = { 0, 1, -1, int.MaxValue, int.MinValue }; uint[] testUints = { uint.MinValue, 1, uint.MaxValue / 2, uint.MaxValue }; foreach (var Int in testInts) { uint asUint = unchecked((uint)Int); Console.WriteLine("int....: {0:D10} ({1})", Int, BitConverter.ToString(BitConverter.GetBytes(Int))); Console.WriteLine("asUint.: {0:D10} ({1})", asUint, BitConverter.ToString(BitConverter.GetBytes(asUint))); Console.WriteLine(new string('-',30)); } Console.WriteLine(new string('=', 30)); foreach (var Uint in testUints) { int asInt = unchecked((int)Uint); Console.WriteLine("uint...: {0:D10} ({1})", Uint, BitConverter.ToString(BitConverter.GetBytes(Uint))); Console.WriteLine("asInt..: {0:D10} ({1})", asInt, BitConverter.ToString(BitConverter.GetBytes(asInt))); Console.WriteLine(new string('-', 30)); } 
Convert.ToInt32()将uint作为值。
 uint i = 10; int j = (int)i; or int k = Convert.ToInt32(i) 
假设uint中包含的值可以用int表示,那么它就像下面这样简单:
 int val = (int) uval; 
 我会说使用tryParse,如果uint为int大,它将返回'false'。 
 不要忘记,只要你> 0,一个uint可以比int更大 
 int intNumber = (int)uintNumber; 
根据您期待的是什么样的值,您可能需要检查转换之前uintNumber的大小。 一个int的最大值约为.5。