Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Übersetzung einer C++-Zeile (https://www.delphipraxis.net/81740-uebersetzung-einer-c-zeile.html)

ultrasombrero 2. Dez 2006 23:46


Übersetzung einer C++-Zeile
 
Hallo!

Ich bin gerade dabei, ein C++-Programm nach Delphi zu übersetzen.

Bei folgender Zeile hakt es allerdings:

Code:
Val1 = *(unsigned int *)ProdKey;
Val1 ist vom Typ "unsigned int" (entspricht wohl dem Typ Cardinal unter Delphi), ProdKey ist vom Typ "unsigned char", ein Array mit 15 Chars.

Wie wandle ich die Zeile um?

ultrasombrero 3. Dez 2006 00:11

Re: Übersetzung einer C++-Zeile
 
OK, ich habs letztendlich durch probieren doch noch herausgefunden.

Obige C++-Zeile liefert das gleiche Ergebnis wie folgende Delphi-Zeilen:
Delphi-Quellcode:
  Val1 :=             Ord(ProdKey[4]);
  Val1 := Val1 * 256 + Ord(ProdKey[3]);
  Val1 := Val1 * 256 + Ord(ProdKey[2]);
  Val1 := Val1 * 256 + Ord(ProdKey[1]);

Dax 3. Dez 2006 00:35

Re: Übersetzung einer C++-Zeile
 
Oder das selbe wie diese:
Delphi-Quellcode:
Val1 := PCardinal(@Prodkey[1])^;
Das ist auch die korrekte Übersetzung für das, was da oben steht - sofern ich mich nicht irre ;)

ste_ett 3. Dez 2006 07:52

Re: Übersetzung einer C++-Zeile
 
Zitat:

Zitat von Dax
Oder das selbe wie diese:
Delphi-Quellcode:
Val1 := PCardinal(@Prodkey[1])^;
Das ist auch die korrekte Übersetzung für das, was da oben steht - sofern ich mich nicht irre ;)

Du irrst nicht. :)

ProdKey ist ein Pointer auf den Array.
dieser Pointer wird umgecastet in einen Pointer auf ein unsigned int und dann dereferenziert, womit man den Wert der Stelle bekommt, auf den der Pointer zeigt.

sniper_w 3. Dez 2006 08:19

Re: Übersetzung einer C++-Zeile
 
ste_ett: genau.
Richtig wäre:
Code:
Val1 := PCardinal(@ProdKey[0])^;
sofern gilt:
Code:
var ProdKey:array[0..15]of Char;

ultrasombrero 3. Dez 2006 11:09

Re: Übersetzung einer C++-Zeile
 
Zitat:

Zitat von sniper_w
ste_ett: genau.
Richtig wäre:
Code:
Val1 := PCardinal(@ProdKey[0])^;
sofern gilt:
Code:
var ProdKey:array[0..15]of Char;

Naja, das gilt eben nicht mehr, da ich in meiner Übersetzung aus dem Array of Char einen String gemacht habe, und der fängt ja eben bei 1 an zu zählen.


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