AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Word<->SmallInt und Cardinal<->Integer mit Bereichsprüfung
Thema durchsuchen
Ansicht
Themen-Optionen

Word<->SmallInt und Cardinal<->Integer mit Bereichsprüfung

Ein Thema von Meta777 · begonnen am 30. Mai 2008 · letzter Beitrag vom 31. Mai 2008
Antwort Antwort
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Word<->SmallInt und Cardinal<->Integer mit Berei

  Alt 30. Mai 2008, 15:22
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
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Word<->SmallInt und Cardinal<->Integer mit B

  Alt 30. Mai 2008, 15:31
Einfach einen expliziten Typecast machen:

MyInteger:=Integer(MyCardinal); Wenn der Cardinal aber größer als 2^31-1 ist, kracht es. Möglicherweise solltest du das vorher überprüfen.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

Re: Word<->SmallInt und Cardinal<->Integer mit B

  Alt 30. Mai 2008, 16:25
omg,
darauf hätte ich ja auch drauf kommen können
Danke schön

Shalom
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#4

Re: Word<->SmallInt und Cardinal<->Integer mit B

  Alt 30. Mai 2008, 19:31
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Word<->SmallInt und Cardinal<->Integer mit B

  Alt 30. Mai 2008, 21:17
Auch bei aktivierten Rangechecks? Sicher?
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#6

Re: Word<->SmallInt und Cardinal<->Integer mit B

  Alt 30. Mai 2008, 21:23
Ja, drum macht man das doch extra so

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Word<->SmallInt und Cardinal<->Integer mit B

  Alt 30. Mai 2008, 21:56
Stimmt, du hast Recht. Ein expliziter Cast scheint keinen Fehler zu verursachen.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

Re: Word<->SmallInt und Cardinal<->Integer mit B

  Alt 31. Mai 2008, 10:12
joa,
funktioniert prima - hät ich ja noch dazu schreiben können ^^

Also vielen Dank nochmal

Shalom
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#9

Re: Word<->SmallInt und Cardinal<->Integer mit B

  Alt 31. Mai 2008, 10:18
ach ja, statt inem explizitem Cast könnte man auch noch eine Absolute-Deklaration verwenden.

Delphi-Quellcode:
Var X: Cardinal;
  Y: Integer absolute X;
hier wird fü Y kein eigener Speicher reserviert, sondern der Speicher der ariable X genutzt.

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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

Re: Word<->SmallInt und Cardinal<->Integer mit B

  Alt 31. Mai 2008, 10:21
Zitat von himitsu:
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)
Gut zu wissen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz