![]() |
(Erledigt)[C++] "*cook++"?/des Verschlüsselung/vnc
Heute mal eine Frage an die C-Spezies unter euch:
Was bedeutet der Zugriff auf *cook++ ? Ok, den Stern kapiere ich noch. Der dereferenziert den Pointer und ich bekommen den Inhalt. Aber auf was wird das ++ angewendet? Auf den zurückgegebenen Wert oder auf den Pointer selbst? Ich brauch das, weil ich grad eine C-Datei (d3des-Verschlüsselung) in Pascal übersetze. Wenn ihr mir schön helft, bekommt ihr dann die Unit. *erpress* ;) |
Re: [C++] Was bedeutet "*cook++"?
auf den Pointer, nach dem dereferenzieren
|
Re: [C++] Was bedeutet "*cook++"?
mann ... das ging ja schnell ... danke!
|
Re: [C++] Was bedeutet "*cook++"?
Auf den zurueckgegebenen Wert wird ein Postincrement nie angewendet.
(*cook)++ und *cook++ liefern den gleichen Wert. Bei (*cook)++ ist aber danach *cook inkrementiert, waehrend *cook++ die Referenz (den Pointer) inkrementiert. |
Re: [C++] Was bedeutet "*cook++"?
Und noch was zur Info:
Code:
c = 5;
a = c++; // a = 5; c = 6;
Code:
c = 5;
a = ++c; // a = 6; c = 6; Ist ++ NACH der Variablen, so wird erst der Wert der Variablen zurückgegeben, dann erhöht. Steht das ++ VOR der Variablen, so wird sie erst erhöht und dann der Wert zurückgegeben. |
Re: [C++] Was bedeutet "*cook++"?
Zitat:
Code:
for (int i=0; i < 10; i++)
;
Code:
Ich kenne es von anderen Compilern auf anderen Systemen, das man mit diesem Unterschied den Zeitpunkt des Inkrement steuern konnte. Erste Schleife lief von 0 bis 9, zweite von 1 bis 9.
for (int i=0; i < 10; ++i)
; Vielleicht könnten zu diesem Punkt noch andere was sagen, weil es früher wichtig war und es mich recht erstaunt hatte das der BCB keinen Unterschied macht. Gab es da in den "neueren" Standards Änderungen?? |
Re: [C++] Was bedeutet "*cook++"?
Zitat:
Ein anderes Verhalten als ein Durchlaufen von 0 bis 9 würde ich ehrlich gesagt nicht erwarten. Laut C99-Rationale war für C89 die Bearbeitung des letzten for-Arguments immer der letzte Schritt in einem Schleifendurchlauf. Eine for-Schleife wurde in eine while-Schleife umgeschrieben, die so aussah:
Code:
Es würde also jeweils eine seperate Anweisung "++i" oder eine separate Anweisung "i++" in der letzten Zeile der while-Schleife stehen.
for (arg1; arg2; arg3)
list; --------- arg1; while (arg2) { list; arg3; } Offensichtlich scheinen die von dir angesprochenen Compiler je nachdem, op pre- oder post-increment verwendet wird, mal 'ne while- und mal 'ne do-Schleife draus zu basteln. IMHO eigenartiges Verhalten. Da du mit der Deklaration der Variable i innterhalb des Schleifenkopfes schon C99 implizierst, habe ich mal ein wenig im Standard gelesen: Zitat:
Ich würde sagen, die von dir angesprochenen Compiler sind leicht defective oder implementieren irgendein anderes oder gar kein Standard-C. |
Re: [C++] Was bedeutet "*cook++"?
Alles klar, gut zu wissen. Der entsprechende Compiler war soweit ich mich noch erinnere Turbo C 1.0 auf dem Atari. Auch betraf es noch einen anderen Compiler, wüsste aber nun nicht mehr genau welcher das war.
Und das in dem Beispiel i in der Schleife deklariert wurde kommt nur daher, dass ich es heutzutage so schreibe, daher nicht wundern. Damals wurde i natürlich früher definiert. Vielen Dank für die Informationen und die Arbeit! |
Re: [C++] Was bedeutet "*cook++"?
Zitat:
Zitat:
|
Re: (Erledigt)[C++] "*cook++"?/des Verschlüsselung
Liste der Anhänge anzeigen (Anzahl: 1)
Danke danke ... und wie versprochen gibts hier die fertige Unit. Sie is dazu gedacht um das VNC-Passwort zu ver-/entschlüsseln.
|
Re: (Erledigt)[C++] "*cook++"?/des Verschlüsselung
Zitat:
Hm, deine Unit sieht sehr nach einer C-Übersetzung aus. Beispelsweise schon in der ersten Funktion cpkey():
Delphi-Quellcode:
Wäre es da nicht sinnvoller, etwas daraus zu schustern, was mehr nach Pascal aussieht und für Pascal-Puristen die Lesbarkeit etwas erhöht? Beispielsweise:
procedure cpkey(into : PLongWord);
var from, endp : PLongWord; begin from:=@KnL; endp:=@KnL[31]; while (Integer(from)<=Integer(endp)) do begin into^:=from^; Inc(into); Inc(from); end; end;
Delphi-Quellcode:
Iss kürzer, spart Variablen auf'm Stack und liest sich einfach besser, wenn man C-Code nicht gewöhnt ist.
procedure cpkey(var into: array of LongWord);
// oder passender selbstdefinierter Array-Typ, ich habe // mir die Unit nicht so genau angesehen um zu wissen, // ob ein Array mit statischer Länger hier sinnvoller // wäre als ein Open Array var i: Integer; begin for i := 0 to 31 do into[i] := KnL[i]; end; Wenn in C Pointer übergeben werden, in die die Funktion Werte schreibt, kann man das sehr oft mit einem einfachen var-Parameter nach Pascal übersetzen. Dadurch verwirrt man Leser nicht mit unnötiger Pointerarithmetik. Ich habe mir die restlichen Funktionen nicht genauer angeschaut, aber auf den ersten Blick würde ich sagen, daß man viele Dinge auf ähnliche Art und Weise mehr pascalisifizieren könnte. Außerdem ist mir bei deinen Arrays aufgefallen, daß das Array ByteBit aus Words besteht, obwohl die Werte nur Byte-Länge haben. Hat das einen Grund? |
Re: (Erledigt)[C++] "*cook++"?/des Verschlüsselung
Na Holla die WaldFee ... da passt aber einer auf. Danke für die Tips.
Was die Pascalifizierung angeht: Ich hab mich bemüht eng an der Struktur der C-Datei zu bleiben, damit das Debuggen leichter fällt und eventuelle Änderungen leichter übernommen werden können. Ersteres hat sich schon bezahlt gemacht, denn wir mussten die Unit an 2 Rechnern debuggen. Der ein hatte die C-Datei geladen, der andere die Pascal-Unit. Daurch die gleiche Struktur konnten wir Zeile für Zeile durchgehen und den Fehler finden. Was das Array angeht: Ja, an sich hast du Recht. Nur: wenn ich anfangen die Unit zu "tunen" kann sie ein anderer vielleicht nicht mehr so leicht verstehen, wenn er den C-Code daneben liegen hat... naja ... es läuft auf obiges hinaus. Natürlich kannst du dir die Unit passend und schöner machen und sie als Konkurrenz-Produkt posten. ;) |
Re: (Erledigt)[C++] "*cook++"?/des Verschlüsselung
Zitat:
Ich kenne Übersetzungen halt nur als Mittel, um etwas für Leser beider Weltanschau^WSprachen zugänglich zu machen, nicht um zweimal möglichst identischen Quellcode zu maintainen ;-) Zitat:
|
Re: (Erledigt)[C++] "*cook++"?/des Verschlüsselung
Liste der Anhänge anzeigen (Anzahl: 1)
Hier noch mal eine gefixte Version.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:20 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