Kann ich lange in Int umwandeln?
-
21-08-2019 - |
Frage
Ich möchte konvertieren long
zu int
.
Wenn der Wert von long
> int.MaxValue
, Ich freue mich, es herumzuwickeln.
Was ist der beste Weg?
Lösung
Mach einfach (int)myLongValue
. Es wird genau das tun, was Sie wollen (MSBs wegwerfen und LSBs einnehmen) unchecked
Kontext (der Compiler -Standard ist). Es wird werfen OverflowException
in checked
Kontext, wenn der Wert nicht in einen passt int
:
int myIntValue = unchecked((int)myLongValue);
Andere Tipps
Convert.ToInt32(myValue);
Obwohl ich nicht weiß, was es tun wird, wenn es größer ist als int.maxValue.
Manchmal interessieren Sie sich nicht wirklich für den tatsächlichen Wert, sondern für seine Verwendung als Prüfsumme/Hashcode. In diesem Fall die integrierte Methode GetHashCode()
ist eine gute Wahl:
int checkSumAsInt32 = checkSumAsIn64.GetHashCode();
Der sichere und schnellste Weg besteht darin, Bitmasking vor dem Besetzung zu verwenden ...
int MyInt = (int) ( MyLong & 0xFFFFFFFF )
Die Bitmaske ( 0xFFFFFFFF
) Der Wert hängt von der Größe der INT ab, da die int -Größe von der Maschine abhängt.
Würde nicht
(int) Math.Min(Int32.MaxValue, longValue)
Mathematisch gesehen der richtige Weg sein?