![]() |
Word<->SmallInt und Cardinal<->Integer mit Berei
hallöchen...
wie kann man bei aktivierten Bereichsprüfung ein Word einem SmallInt bzw. ein Cardinal einem Integer zuweisen? Habe im Forum nichts finden können. vielen Dank & Shalom |
Re: Word<->SmallInt und Cardinal<->Integer mit B
Einfach einen expliziten Typecast machen:
Delphi-Quellcode:
Wenn der Cardinal aber größer als 2^31-1 ist, kracht es. Möglicherweise solltest du das vorher überprüfen.
MyInteger:=Integer(MyCardinal);
|
Re: Word<->SmallInt und Cardinal<->Integer mit B
omg,
darauf hätte ich ja auch drauf kommen können :stupid: Danke schön Shalom |
Re: Word<->SmallInt und Cardinal<->Integer mit B
wieso sollte es krachen?
bei Integer zu Cardinal wird einfach nur binär kopiert ... heißt das "Vorzeichenbit" (MSB des Integer) wird zum Hi-Bit (MSB des Cardinal) da kracht dann schon nix :angel: |
Re: Word<->SmallInt und Cardinal<->Integer mit B
Auch bei aktivierten Rangechecks? Sicher?
|
Re: Word<->SmallInt und Cardinal<->Integer mit B
Ja, drum macht man das doch extra so :zwinker:
Integer ist ein 32 Bit-Speicherblock Cardinal auch Auf diese Weise sagt man dem Compiler einfach, daß er den Speicherbereich der Integervariabe als Cardinal interpretieren soll. Heißt, dieses wird nun als Cardinal angesehn und somit der RangeCheck des Cardinals verwendet. Und da Cardinal = Cardinal ist, gibt es keine Probleme. |
Re: Word<->SmallInt und Cardinal<->Integer mit B
Stimmt, du hast Recht. Ein expliziter Cast scheint keinen Fehler zu verursachen.
|
Re: Word<->SmallInt und Cardinal<->Integer mit B
joa,
funktioniert prima - hät ich ja noch dazu schreiben können ^^ Also vielen Dank nochmal Shalom |
Re: Word<->SmallInt und Cardinal<->Integer mit B
ach ja, statt inem explizitem Cast könnte man auch noch eine Absolute-Deklaration verwenden.
Delphi-Quellcode:
hier wird fü Y kein eigener Speicher reserviert, sondern der Speicher der ariable X genutzt.
Var X: Cardinal;
Y: Integer absolute X; Funktioniert nur bei gleich großen Typen ( SizeOf(X) = SizeOf(Y) ), aber dafür auch bei Typen, wo ein expliziter Cast nicht möglich ist, da sich der Compiler weigert (z.B. Int64 und Currency, obwohl sie intern vom selben Typ sind) |
Re: Word<->SmallInt und Cardinal<->Integer mit B
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz