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?

War es hilfreich?

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?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top