Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   unsigned int in delphi ? (https://www.delphipraxis.net/66517-unsigned-int-delphi.html)

Shadow 30. Mär 2006 17:58


unsigned int in delphi ?
 
Hi ho,

ich bastel gerade ne Headerdatei aus c in delphi um. Problem ist
ein datentyp ist im c header ... unsigned int .. welchem Delphityp entspricht das ?

unsigned long scheint cardinal zu sein ... nur bei int ?

mfg Andy

Neutral General 30. Mär 2006 18:00

Re: unsigned int in delphi ?
 
Word ist ein 16-Bit Unsigned Integer.

Shadow 30. Mär 2006 18:03

Re: unsigned int in delphi ?
 
oh ;-) Danke dir.

Rastaman 30. Mär 2006 18:28

Re: unsigned int in delphi ?
 
UINT, kann man in C auch schreiben.

himitsu 30. Mär 2006 18:58

Re: unsigned int in delphi ?
 
unsigned long ist LongWord ... Cardinal hat keine feste Länge ... in Delphi 1 war es noch 16 Bit, da D1 16-Bit-Programme erstellte ... aktuell ist es 32 Bit, da wir ja 32-Bit-Programme erstellen und bald ist es 64 Bit ... steht aber auch in der OH :warn:

Frickeldrecktuxer_TM 30. Mär 2006 19:29

Re: unsigned int in delphi ?
 
ich zitiere mal aus dem C9X-standard:
Zitat:

Zitat von ISO/IEC 9899:1999, WG14
There are five standard signed integer types, designated as signed char, short
int, int, long int, and long long int. (These and other types may be designated in several additional ways, as described in 6.7.2.) There may also be implementation-defined extended signed integer types. The standard and extended signed integer types are collectively called signed integer types.26)

An object declared as type signed char occupies the same amount of storage as a ‘‘plain’’ char object. A ‘‘plain’’ int object has the natural size suggested by the architecture of the execution environment (large enough to contain any value in the range INT_MIN to INT_MAX as defined in the header <limits.h>).

INT_MIN ist -32767 und INT_MAX ist +32767.
es ist also lediglich sichergestellt daß "int" in C mindestens diesen zahlenbereich speichern kann. gleiches gilt für "unsigned int" wobei gilt: UINT_MAX = 65535. auch hier wird nur festgeschrieben daß der datentyp diese zahl speichern können muss.
eine vollkommen legale übersetzung nach Delphi wären also genauso gut die Delphi-typen "Integer", "Cardinal" oder "Int64". es macht keinerlei unterschied denn alle diese typen können die zahl 65535 eindeutig speichern. das hier vorgeschlagene "Word" ist lediglich der kleinste datentyp der die anforderungen "gerade so" noch erfüllt. der standard schlägt vor daß der datentyp int an die architektur angepasst werden soll.
hier musst du also das handbuch deines compilers dazu befragen wie groß bei ihm "unsigned int" ist. normalerweise wäre es auch einer IA32 32bit. dann wäre eine korrekte übersetzung "LongWord".
und wenn du dich später dazu entschließt einen anderen C-compiler für deinen objektcode (du willst ja anscheinend nur den header übersetzen) zu nehmen wirst du erneut nachschauen müssen wie groß "unsigned int" auf dem neuen compiler ist.

Shadow 30. Mär 2006 19:43

Re: unsigned int in delphi ?
 
Danke für deine ausführlich Antwort. Klingt logisch. Problem ist nur, dass ich nicht weiß mit welchen compiler oder auf welchem system/Plattform dieser c source code compiliert wird. Geht halt darum das ich eine dll ansprechen will und einige Konstanten und datentypen konvertieren muss.

mfg Andy

Frickeldrecktuxer_TM 30. Mär 2006 19:52

Re: unsigned int in delphi ?
 
Zitat:

Zitat von Shadow
Problem ist nur, dass ich nicht weiß mit welchen compiler oder auf welchem system/Plattform dieser c source code compiliert wird. Geht halt darum das ich eine dll ansprechen will und einige Konstanten und datentypen konvertieren muss.

da es eine DLL ist kann man erstmal von Windows ausgehen. das bedeutet daß es wahrscheinlich 16 oder 32 bit sein werden. mehr wäre äußerst unwahrscheinlich.
jetzt müsste dir nur noch einer sagen was sizeof(unsigned int) beim Borland C++ Compiler, beim Microsoft Visual C++ Compiler und beim Intel C++ Compiler ergibt. wenn du glück hast sind die zahlen gleich und du hast eine (einigermaßen) zuverlässige aussage über die größe. wenn es eine DLL ist die aus einem opensource-projekt stammt wäre der GCC aus Ming/W oder Cygwin noch denkbar. bei mir unter Linux haben sowohl der GCC (C) als auch der G++ (C++) für den datentyp "unsigned int" 32 bit. ich nehme stark an daß das unter Windows genauso ist.

Shadow 30. Mär 2006 22:02

Re: unsigned int in delphi ?
 
es handelt sich bei den header dateien um c dateien aus dem open source code von MySQL. Denke das niemand ersthaft diesen source über cygwin compilieren will :) Würde dann auch zu den 32bit tendieren da es unter linux wie du meinst ja der fall ist.

mfg Andy

himitsu 31. Mär 2006 09:48

Re: unsigned int in delphi ?
 
Und da wir aktuell eh vorwiegend mit 32-Bit-Programmen zu tun haben, ist die Annahme, daß es sich um 32-Bit, also um LongWord handelt schon OK.

Ansonsten nimm halt Cardinal und wenn beide Dateien (dein Programm und die DLL) mit 'nem 32-Bitr-Compiler kompiliert werden stimmt es auch wieder.

Und genau um solchen Problemen entgegenzuwirken, arbeite ich möglichst nicht mit Integer/Cardinal/Boolean... (also den systemabhängigen Datentypen) :???:


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:08 Uhr.
Seite 1 von 2  1 2      

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