Cast unsigned long nach int in VC++?
Ich übergeben zu müssen, ein 'unsigned long' type argument an eine Funktion, die nimmt nur int.
Ich habe nicht gefunden, eine sichere Art und Weise zu wirken, auf der MSDN-Website. Könnte jemand bitte teilen Sie, eine sichere Funktion zu tun?
- Sie können nicht schlüssig machen Sie es sicher; unsigned long zu halten, kann eine größere Anzahl als int kann. So lange, wie Sie Ihre Werte nie mehr als MAXINT ist, dann kann man einfach casten.
- Wie definieren Sie sicher? Was wollen Sie, das Ergebnis zu werden, wenn die enthaltenen Wert in der
unsigned long
übersteigt, die passen in eineint
? - Es ist
INT_MAX
, nichtMAXINT
. - Wow, richtig. MAXINT ist eine Pascal-Ding, denke ich?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keinen "sicheren" Weg, um zu konvertieren eine
unsigned long
Wertint
werden, da einunsigned long
können Werte enthalten, nicht dargestellt werden können in einemint
.Könnte man etwas wie das hier tun:
Beachten Sie, dass es nicht notwendig ist in diesem Fall zu prüfen, gegen
INT_MIN
. Wenn das argument warenlong
eher alsunsigned long
Sie wollen, um zu überprüfen, die gegen die untere und Obere Schranken:Natürlich Sie müssen entscheiden, was zu tun ist, wenn der Wert nicht passt.
Es keinen sicheren Weg gibt, da
unsigned long
enthält Werte, die dargestellt werden könnenint
.Aber wenn Sie sicher sind, dass die Konvertierung ist sicher, Sie können schreiben
(int)argument
oderstatic_cast<int>(argument)
oder pass einfach ein argument, wie es ist, die Sprache führt die Konvertierung automatisch.