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

Delphi Discussion :

Conversion c++ en delphi


Sujet :

Delphi

  1. #1
    Membre averti
    Femme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2020
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2020
    Messages : 32
    Par défaut Conversion c++ en delphi
    Bonjour à tous,

    Quelqu'un pourrais m'aider à convertir mon CRC fait en c++ vers le langage delphi s'il vous plaît ?

    Un grand merci

    Code C++ : 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
     
    unsigned short crc( unsigned char *p, unsigned short length){
    	const unsigned short generator_polynom = 0x8810;
    	int i, carry;
    	unsigned short sum;
    	for (sum = 0; length > 0 ; length -- , p++){
    		sum ^= (unsigned short) *p << 8 ;
    		for( i = 0 ; i<8 ; i++){
    			if (carry = ((sum & 0x8000) != 0))
    			{
    				sum ^= generator_polynom;
     
    			}
    			sum = (sum <<1) + carry;
    		}
     
    	}
    	return sum;	
    }

  2. #2
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    ça doit donner quelque chose de cet ordre

    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
     
    // unsigned short crc( unsigned char *p, unsigned short length){
    fuction crc(p: PAnsiChar; len: Integer): word;
    //	const unsigned short generator_polynom = 0x8810;
    //	int i, carry;
    //	unsigned short sum;
    var
      generator_polynom: Word;
      x, i, carry: Integer;
      num: Word;
    begin
      generator_polynom := $8810;
    //	for (sum = 0; length > 0 ; length -- , p++){
      sum := 0;
      for x := 0 to length - 1 do
      begin
    //		sum ^= (unsigned short) *p << 8 ;
        sum := sum xor (ord(p[x]) shl 8);
    //		for( i = 0 ; i<8 ; i++){
       for i := 0 to 7 do
      begin
    //			if (carry = ((sum & 0x8000) != 0))
       carry := Ord(sum and $8000 <> 0);
       if carry <> 0 then
       begin
    //				sum ^= generator_polynom;
         sum := sum xor generator_polynom;
    //		}
      end;
    //			sum = (sum <<1) + carry;
       sum := (sum shl 1) + carry;
    //		}
      end;
    //	}
      end;
    //	return sum;	
      Result := sum;
    //}
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre averti
    Femme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2020
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2020
    Messages : 32
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    ça doit donner quelque chose de cet ordre

    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
     
    // unsigned short crc( unsigned char *p, unsigned short length){
    fuction crc(p: PAnsiChar; len: Integer): word;
    //	const unsigned short generator_polynom = 0x8810;
    //	int i, carry;
    //	unsigned short sum;
    var
      generator_polynom: Word;
      x, i, carry: Integer;
      num: Word;
    begin
      generator_polynom := $8810;
    //	for (sum = 0; length > 0 ; length -- , p++){
      sum := 0;
      for x := 0 to length - 1 do
      begin
    //		sum ^= (unsigned short) *p << 8 ;
        sum := sum xor (ord(p[x]) shl 8);
    //		for( i = 0 ; i<8 ; i++){
       for i := 0 to 7 do
      begin
    //			if (carry = ((sum & 0x8000) != 0))
       carry := Ord(sum and $8000 <> 0);
       if carry <> 0 then
       begin
    //				sum ^= generator_polynom;
         sum := sum xor generator_polynom;
    //		}
      end;
    //			sum = (sum <<1) + carry;
       sum := (sum shl 1) + carry;
    //		}
      end;
    //	}
      end;
    //	return sum;	
      Result := sum;
    //}
    end;

    Je te remercie grandement, je comprend beaucoup mieux. C'est très gentil.

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 001
    Par défaut
    Citation Envoyé par zohra051 Voir le message
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	for (sum = 0; length > 0 ; length -- , p++)
    Original ce length -- pour éviter une variable "j"
    Se servir du for pour initaliser le sum à zéro en début de boucle, ça aussi c'est retord

    pour rester dans l'esprit de l'optimisation je n'aurais pas utilisée x de for x := 0 to length - 1 do
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sum := sum xor (ord(p[x]) shl 8);
    ainsi serait comme en C++ avec un incrément
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sum := sum xor (ord(p^) shl 8);
    Inc(p);
    Avantage, ne pas utiliser x génère une boucle for légèrement différente (en fait celle du C++ allant de length - 1 à 0 au lieu de 0 à length - 1, la comparaison à zéro étant plus rapide)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    en fait le code initial correspond à un truc comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      sum := 0;
      while length > 0 do
      begin
       ...
        Dec(Length);
        Inc(p);
      end;
    l'introduction de X évite l'incrément et décrément...je n'ai pas regardé le code généré mais il est possible que X soit un registre avec une lecture de [ofs + reg] qui soit plus rapide au final
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 001
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    en fait le code initial correspond à un truc comme ... while length > 0 do
    Tout à fait, je trouve ta dernière forme plus proche du code C++, je trouve ça plus didactique cette traduction qui effectue les mêmes opérations

    unsigned char *p aimant savoir le contexte, si c'est plutôt un PAnsiChar ou un PByte ... car le type de paramètre peut influencer le code, surtout en Delphi entre le RawByteString, le array of Char ou TBytes ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. [Lazarus] Conversion de projets Delphi > Lazarus Linux
    Par Clandestino dans le forum Lazarus
    Réponses: 0
    Dernier message: 28/08/2008, 09h27
  2. Interface et conversion C++ vers Delphi
    Par monmien dans le forum Langage
    Réponses: 8
    Dernier message: 17/06/2008, 16h27
  3. Conversion C# vers Delphi.NET
    Par JulioG dans le forum Delphi .NET
    Réponses: 2
    Dernier message: 15/02/2008, 12h03
  4. Conversion de C => Delphi
    Par Steff2 dans le forum Langage
    Réponses: 2
    Dernier message: 21/08/2007, 23h32
  5. conversion de date (delphi/oracle)
    Par dolphins dans le forum Bases de données
    Réponses: 1
    Dernier message: 26/09/2005, 16h15

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