Wie konvertiere ich uint in C # in int?
uintin eine longals longDose umzuwandeln, die alle uintWerte enthält , in denen als intnicht ( wie bereits erwähnt )
Wie konvertiere ich uint in C # in int?
uintin eine longals longDose umzuwandeln, die alle uintWerte enthält , in denen als intnicht ( wie bereits erwähnt )
Antworten:
Gegeben:
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
oder
int i = Convert.ToInt32(n); //same behavior as checked
--BEARBEITEN
Enthaltene Informationen wie von Kenan EK erwähnt
uintgrößer ist als, int.MaxValueSie ein negatives Ergebnis erhalten, wenn Sie eine Besetzung verwenden, oder eine Ausnahme, wenn Sie verwenden Convert.ToInt32.
Beachten Sie die Schlüsselwörter checkedund unchecked.
Es ist wichtig, ob das Ergebnis auf int abgeschnitten oder eine Ausnahme ausgelöst werden soll, wenn das Ergebnis nicht in vorzeichenbehaftete 32 Bit passt. Die Standardeinstellung ist deaktiviert.
Angenommen, Sie möchten einfach die 32 Bits von einem Typ abheben und sie unverändert in den anderen Typ ablegen:
uint asUint = unchecked((uint)myInt);
int asInt = unchecked((int)myUint);
Der Zieltyp wählt blind die 32 Bits aus und interpretiert sie neu.
Umgekehrt, wenn Sie mehr daran interessiert sind, die Dezimal- / Zahlenwerte im Bereich des Zieltyps selbst zu halten:
uint asUint = checked((uint)myInt);
int asInt = checked((int)myUint);
In diesem Fall erhalten Sie Überlaufausnahmen, wenn:
In unserem Fall wollten wir, dass die unchecked32-Bit-Version unverändert bleibt. Hier einige Beispiele:
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()nimmt uintals Wert.
Angenommen, der in uint enthaltene Wert kann in einem int dargestellt werden, dann ist es so einfach wie:
int val = (int) uval;
uint i = 10;
int j = (int)i;
oder
int k = Convert.ToInt32(i)
int intNumber = (int)uintNumber;
Abhängig davon, welche Art von Werten Sie erwarten, möchten Sie möglicherweise vor der Konvertierung überprüfen, wie groß uintNumber ist. Ein int hat einen Maximalwert von ungefähr 0,5 eines uint.