ฉันจะแปลง uint เป็น int ใน C # ได้อย่างไร
uintไปlongเป็นlongสามารถมีทุกuintค่าที่เป็นintสามารถ (ไม่ได้กล่าวถึงแล้ว )
ฉันจะแปลง uint เป็น int ใน C # ได้อย่างไร
uintไปlongเป็นlongสามารถมีทุกuintค่าที่เป็นintสามารถ (ไม่ได้กล่าวถึงแล้ว )
คำตอบ:
ให้:
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
uintมีค่ามากกว่าที่คุณจะได้รับผลลบถ้าคุณใช้การโยนหรือยกเว้นถ้าคุณใช้int.MaxValue Convert.ToInt32
สมมติว่าคุณต้องการเพียงแค่ยก 32 บิตจากประเภทหนึ่งและถ่ายโอนข้อมูลตามที่เป็นอยู่ไปยังประเภทอื่น:
uint asUint = unchecked((uint)myInt);
int asInt = unchecked((int)myUint);
ประเภทปลายทางจะสุ่มเลือก 32 บิตและตีความใหม่
ในทางกลับกันหากคุณสนใจที่จะรักษาค่าทศนิยม / ตัวเลขให้อยู่ในช่วงของประเภทปลายทางเอง:
uint asUint = checked((uint)myInt);
int asInt = checked((int)myUint);
ในกรณีนี้คุณจะได้รับข้อยกเว้นล้นหาก:
ในกรณีของเราเราต้องการuncheckedวิธีแก้ปัญหาเพื่อรักษา 32 บิตตามที่เป็นอยู่ดังนั้นนี่คือตัวอย่างบางส่วน:
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...: 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 สามารถแสดงเป็น int ได้ดังนั้นจึงทำได้ง่าย ๆ ดังนี้:
int val = (int) uval;
ฉันจะบอกว่าใช้ tryParse มันจะส่งคืน 'เท็จ' ถ้า uint ใหญ่สำหรับ int
อย่าลืมว่า uint สามารถไปได้มากกว่า int มากตราบเท่าที่คุณไป> 0
uint i = 10;
int j = (int)i;
หรือ
int k = Convert.ToInt32(i)
int intNumber = (int)uintNumber;
ขึ้นอยู่กับประเภทของค่าที่คุณคาดหวังคุณอาจต้องการตรวจสอบว่า uintNumber มีขนาดใหญ่เพียงใดก่อนที่จะทำการแปลง int มีค่าสูงสุดประมาณ. 5 ของ uint