Pointer - Delphi 7 nach C übersetzen?
-
Hi Leute
wie kann ich dieses Stück code in c schreiben?
function myFunction(a: DWord): DWord; procedure blup(var a: blup1; var b: blup2); type myType= ^DWord; //HIER begin ... myType(@a.Buffer[123])^:= myFunction(b.val); //HIER ...
es geht mir hier um die pointer, ich blicke da gar nicht durch, kann mir das jemand erklären? (die Zeilen wo //HIER steht)
-
Mein Pascal ist sehr, sehr eingerostet, aber das meiste kann ich mir hoffentlich richtig erschließen:
// Hier irgendwo ein typedef, was ein DWord ist DWord myFunction(DWord a); // Hier irgendwo typedefs, was blup1 und blup2 sind void blup(blup1 *a, blup2 *b) { typedef DWord* myType; *(myType) &a->Buffer[123] = myFunction(b->val); }
Dies wäre die 1:1 Übersetzung. Wenn du sagst, was die Funktion tatsächlich tut, kann man vielleicht auch noch was besseres finden. Bisher ist die Frage so abstrakt gestellt, dass dies die einzige Antwort ist, die ich geben kann.
-
Danke schon mal für Deine Antwort, leider klappt es immernoch nicht. Das Programm wird zwar richtig kompiliert, jedoch das Ergebnis ist nicht das erwartete.
ich versuche SHA1 in c zu implementieren, bis soweit auch fertig jedoch funktioniert eben dieses casten noch nicht.
Der delphi code: http://nadesiko.googlecode.com/svn/trunk/hi_unit/Sha1.pas (siehe ganz unten)
Das lustige (wobei ich das eher nicht mehr lustig finde) ist, dass wenn ich den delphi code ändere auf:
procedure SHA1Final(var Context: TSHA1Context; var Digest: TSHA1Digest); ... Context.Buffer[56] := RB(Context.Hi); Context.Buffer[60] := RB(Context.Lo); ...
Dann stimmen beide Ergebnisse überein! Ebenso ändert sich nix wenn ich es so mache wie Du es geschrieben hast...
Ich muss jedoch das gleiche Ergebnis erzielen wie das ursprüngliche Dephi-Programm...
Irgendwo muss noch eine kleinigkeit fehlen, aber wo?
-
Es ist besser, selber mit den Mitteln einer Sprache eine Programm zu schreiben, als eine schlechte Übersetzung aus einer anderen Sprache zu versuchen. Dies gilt ganz besonders für Programme, die auf Byteebene rumfrickeln.
-
Es wäre trotzdem interessant wieso das so ist? Wieso funktioniert es bei Delphi, jedoch nicht bei c?