Làm cách nào để chuyển đổi uint thành int trong C #?
uint
đến một long
như một long
thể chứa tất cả uint
các giá trị nơi như một int
không thể ( như đã đề cập )
Làm cách nào để chuyển đổi uint thành int trong C #?
uint
đến một long
như một long
thể chứa tất cả uint
các giá trị nơi như một int
không thể ( như đã đề cập )
Câu trả lời:
Đượ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
hoặc là
int i = Convert.ToInt32(n); //same behavior as checked
--BIÊN TẬP
Thông tin bao gồm như đã đề cập bởi Kenan EK
uint
lớn hơn, int.MaxValue
bạn sẽ nhận được kết quả âm tính nếu bạn sử dụng phương pháp cast hoặc một ngoại lệ nếu bạn sử dụng Convert.ToInt32
.
Ghi chú các từ khóa checked
vàunchecked
Nó quan trọng nếu bạn muốn kết quả bị cắt ngắn thành int hoặc một ngoại lệ được nêu ra nếu kết quả không phù hợp với 32 bit có dấu. Mặc định không được chọn.
Giả sử bạn chỉ muốn nâng 32bits từ một loại và chuyển chúng nguyên trạng sang loại khác:
uint asUint = unchecked((uint)myInt);
int asInt = unchecked((int)myUint);
Kiểu đích sẽ chọn 32 bit một cách mù quáng và diễn giải lại chúng.
Ngược lại, nếu bạn quan tâm hơn đến việc giữ các giá trị thập phân / số trong phạm vi của chính loại đích:
uint asUint = checked((uint)myInt);
int asInt = checked((int)myUint);
Trong trường hợp này, bạn sẽ nhận được các ngoại lệ tràn nếu:
Trong trường hợp của chúng tôi, chúng tôi muốn unchecked
giải pháp để giữ nguyên 32bit, vì vậy đây là một số ví dụ:
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()
nhận uint
như một giá trị.
uint i = 10;
int j = (int)i;
hoặc là
int k = Convert.ToInt32(i)
int intNumber = (int)uintNumber;
Tùy thuộc vào loại giá trị bạn đang mong đợi, bạn có thể muốn kiểm tra xem uintNumber lớn như thế nào trước khi thực hiện chuyển đổi. Một int có giá trị tối đa khoảng 0,5 của uint.