Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Hex-Zahlen in C und Delphi (https://www.delphipraxis.net/48798-hex-zahlen-c-und-delphi.html)

oXmoX 30. Jun 2005 13:58


Hex-Zahlen in C und Delphi
 
Hallo,

ich habe ein Stück C-Code aus einem Header-File, das ich in Delphi abbilden möchte:

Code:
#define IPL_DEPTH_SIGN 0x80000000
#define IPL_DEPTH_8S (IPL_DEPTH_SIGN| 8)
das Delphi Analog sieht bei mir so aus:

Code:
const
  IPL_DEPTH_SIGN: Integer = $80000000;
  IPL_DEPTH_8S:  Integer = IPL_DEPTH_SIGN or Integer($80000000);
Allerdings meldet der Compiler in beiden Zeilen eine Warnung:
Konstantenausdruck verletzt untere Grenzen.

Wie kann ich das verhindern?

Gruß,
oXmoX

jfheins 30. Jun 2005 14:02

Re: Hex-Zahlen in C und Delphi
 
Lass einfach das Integer weg, der Compiler macht schon das Richtige draus ;)

Also:
Delphi-Quellcode:
const
   IPL_DEPTH_SIGN = $80000000;

Robert Marquardt 30. Jun 2005 14:03

Re: Hex-Zahlen in C und Delphi
 
Delphi-Quellcode:
const
  IPL_DEPTH_SIGN = $80000000;
  IPL_DEPTH_8S = IPL_DEPTH_SIGN or 8;
Das ist die korrekte Konversion.
Wenn da 8 steht dann sollte man auch 8 nehmen und nicht $80000000.
Getypt muessen die Konstanten nicht sein. Sowohl Delphi als auch C nehme den naechstpassenden Typ, der im Falle von Hexkonstanten Cardinal ist.

oXmoX 30. Jun 2005 14:24

Re: Hex-Zahlen in C und Delphi
 
Zitat:

Zitat von Robert Marquardt
Wenn da 8 steht dann sollte man auch 8 nehmen und nicht $80000000.

Oh ...kleiner Fehler meinerseits. In meinen Sourcen stand das schon richtig.

Zitat:

Zitat von jfheins
Lass einfach das Integer weg, der Compiler macht schon das Richtige draus

Aha ...wusste garnicht, dass es in Delphi auch ungetypte Konstanten gibt.

Danke!

barf00s 30. Jun 2005 16:36

Re: Hex-Zahlen in C und Delphi
 
oder mach aus dem integer nen cardinal...

DA

integer von -2,1Mrd ... +2,1Mrd geht was etwa 7FFFFFFF entspräche
80000000 wäre schonn eins drüber aber schon aus dem gültigkeitsbereich vom int raus, eigentlich ;)

cardinal = 0..+4,2Mrd

blah..... steht auch alles in der Hilfe


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:01 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