IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Convertir code C en delphi


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 39
    Points : 19
    Points
    19
    Par défaut Convertir code C en delphi
    Salut, j'aurais besoin d'aide, car j'ai trouvé ce code en C et j'en ai absolument besoin pour mon programme en Delphi, cependant, je ne connait pas grand chose au C, et je n'arrive pas à convertir ce code, car je ne trouve pas d'équivalent delphi aux fonction utilisée.
    Sa serait sympas si quelqu'un pouvait m'aider, merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    #include <stdio.h>
    #include <stdlib.h>
     
    #define SIGN_START 0x800
    #define SIG_POS 0x2d0
    #define INIT_SUM 0x00000000
     
    int main(int argc, char **argv)
    {
    	FILE *fp;
    	int sum, buf;
    	if (argc != 2) {
    	   printf("Bad args.  should be %s <mapfile>\n", argv[0]);
    	   exit(0);
    	}
     
    	if (!(fp = fopen(argv[1], "r+"))) {
    	   printf("Error opening file.\n");
    	   exit(0);
    	}
     
    	// initialize xor sum
    	sum = INIT_SUM;
     
    	// go to start of hash
    	fseek(fp, SIGN_START, SEEK_SET);
     
    	// assuming 4 byte ints.
    	while (!feof(fp)) {
    	   fread(&buf, sizeof(int), 1, fp);
    	   sum = sum ^ buf;
    	}
    	sum = sum ^ buf;
    	clearerr(fp);
    	fseek(fp, SIG_POS, SEEK_SET);
    	fwrite(&sum, sizeof(int), 1, fp);
    	fclose(fp);
    }

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut Re: Convertir code C en delphi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
     
    // Définition des constantes
     
    #define SIGN_START 0x800
    #define SIG_POS 0x2d0
    #define INIT_SUM 0x00000000
     
    // fonction principale en C, char argv a l'air d'être comme le paramstr().
     
    int main(int argc, char **argv)
    {
    	FILE *fp; // variable TFileStream
    	int sum, buf; // définition de variables
     
    	if (argc != 2) { // si argc <> 2 alors
    	   printf("Bad args.  should be %s <mapfile>\n", argv[0]); // affchage si <> 2
    	   exit(0); // sortir de la fonction
    	}
     
    	if (!(fp = fopen(argv[1], "r+"))) { // ouverture du TFileStream
    	   printf("Error opening file.\n");
    	   exit(0);
    	}
     
    	// initialize xor sum
    	sum = INIT_SUM;
     
    	// go to start of hash
    	fseek(fp, SIGN_START, SEEK_SET);// se positionner dans le fichier (utiliser Seek)
     
    	// assuming 4 byte ints.
    	while (!feof(fp)) { // boucle de récupération des données jusqu'à qu'on arrive en fin de fichier
    	   fread(&buf, sizeof(int), 1, fp); // Utiliser ReadBuffer pour la lecture dans le fichier
    	   sum = sum ^ buf; 
    	}
    	sum = sum ^ buf;
     
    // Ecrit la somme a la position SIG_POS dans le fichier
    	clearerr(fp);
    	fseek(fp, SIG_POS, SEEK_SET);
    	fwrite(&sum, sizeof(int), 1, fp);
    	fclose(fp); // fermeture du fichier
    }

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 39
    Points : 19
    Points
    19
    Par défaut
    Ok, super, merci, c'est vachement bien commenté en plus
    Je vais testé ça plus tard, et je dirais si sa marche.

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par jt-tronix
    Ok, super, merci, c'est vachement bien commenté en plus
    Je vais testé ça plus tard, et je dirais si sa marche.
    Je t'ai juste indiquer à quoi ca sert, après, à toi d'adapter selon les besoins. (ca fait un petit moment que j'ai plus fait de C, donc ca rique de pas être tres juste pour tout)

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 39
    Points : 19
    Points
    19
    Par défaut
    Oui, je viens de voir sa, je vais essayé de me débrouiller

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    au cas ou tu as ca pour t'aider : http://delphi.developpez.com/faq/?pa...ertir_c_delphi

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 39
    Points : 19
    Points
    19
    Par défaut
    Ok, merci pour le lien, il m'a aidé, j'ai cependant un eptit soucis, je n'arrive pas à trouver à quoi correspond "sizeof(int)" en C, je sais que c'est également "sizeof()" en delphi, mais je ne sais pas a quoi correspond l'argument.

  8. #8
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Met ta variable à la place du int

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 38
    Points : 18
    Points
    18
    Par défaut
    Bonjour

    Je suis aussi 1.t.ré.C par la convertion C delphi mais je ne sais pas si c'est bien ce lien que je doit choisir dans:
    http://delphi.developpez.com/faq/?pa...ertir_c_delphi

    http://www.delphi-jedi.org/APICONVTEAMS

    Merci

  10. #10
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 39
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par Malatar
    Met ta variable à la place du int
    Oui, mais justement, laquelle variable, c'est ça qui me pose probleme, je sais bien que c'est une variable, mais je sais pas laquelle!

  11. #11
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ATTIA
    Je suis aussi 1.t.ré.C par la convertion
    Merci de lire les régles du forum.
    les régles du club.

  12. #12
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jt-tronix
    Oui, mais justement, laquelle variable, c'est ça qui me pose probleme
    ici il me semble que c'est plus le type int qui est concerné, la variable Buf étant du même type (4 octets).

  13. #13
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 39
    Points : 19
    Points
    19
    Par défaut
    Merci pour vos réponse, mais j'ai trouvé voila le code final :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    procedure TForm1.Button1Click(Sender: TObject);
    const
      SIGN_START = $800;
      SIG_POS = $2D0;
      INIT_SUM = $00000000;
    var
      F: file;
      buf: integer;
      sum: integer;
      i:integer;
    begin
      i:=0;
      sum := INIT_SUM;
      Assignfile(F, './fichier.ext');
      FileMode := 2;
      Reset(F, 1);
      Seek(F, SIGN_START);
      while not eof(F) do
        begin
          BlockRead(F, buf, sizeof(buf));
          sum := sum xor buf;
          i:=i+1;
        end;
      seek(F,SIG_POS);
      BlockWrite(F, sum, sizeof(buf));
      CloseFile(F);
      label1.caption := inttostr(sum);
    end;
    Après avoir résolu une erreur dans le premier code source : le
    n'existe normalement pas.

    Cependant, ce processus par rapport à celui en C n'est pas très rapide, que puis je faire pour augmenter la rapidité ?

    J'ai réussi à le mettre avec un TfileStream :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    procedure TForm1.Button1Click(Sender: TObject);
    const
      SIGN_START = $800;
      SIG_POS = $2D0;
      INIT_SUM = $00000000;
    var
      F: TfileStream;
      buf: integer;
      sum: integer;
      i: integer;
    begin
      i := 0;
      sum := INIT_SUM;
      F := TFileStream.Create('./Lockout.map', fmOpenReadWrite);
      F.Position := SIGN_START;
      while F.Position <> F.size do
        begin
          F.ReadBuffer(buf, SizeOf(integer));
          sum := sum xor buf;
        end;
      F.Position := SIG_POS;
      F.WriteBuffer(sum, SizeOf(integer));
      F.Free;
      label1.caption := inttostr(sum);
    end;
    Mais c'est encore moin rapide : 34secondes pour 32mo contre 24secondes pour la première méthode, mais à un moment le programme bug mais revient à la fin du traitement, alors qu'avec le programme en C : 5secondes.

Discussions similaires

  1. Convertir un Code VB en Delphi
    Par chlebta*tsotsi dans le forum Langage
    Réponses: 1
    Dernier message: 24/06/2010, 17h50
  2. Convertir code Delphi en C++
    Par colorid dans le forum Débuter
    Réponses: 3
    Dernier message: 16/03/2009, 19h50
  3. convertir code clavier en caractère
    Par danyboy85 dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 22/02/2006, 19h15
  4. Code VB6 vers Delphi ?
    Par isachat666 dans le forum Langage
    Réponses: 4
    Dernier message: 11/01/2006, 15h07
  5. utilisation d'un lecteur de code barre sous delphi
    Par bm10 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 19/11/2005, 20h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo