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 String vers Byte


Sujet :

Delphi

  1. #1
    Candidat au Club
    Inscrit en
    Septembre 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Conversion String vers Byte
    Bonjour,

    Pour des besoins de cryptage j'ai besoin de travailler avec des octets (byte en anglais) mais les chaines à crypter sont évidemment disponibles initialement au format String.

    Existe-t'il une fonction "bête" permettant cette conversion ?

    Sinon, est-ce que les deux fonctions suivantes de conversion sont correctes ?

    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
    function CharToByte(chrLettre:Char):Byte;
    var bRes:Byte;
    begin 
         case ( Ord(chrLettre) - 48) of 
         0..9:bRes := Ord(chrLettre) - 48; 
         else 
             bRes := Ord(chrLettre) + 10 - 65; 
         end; 
         Result := bRes; 
    end;
     
    function ByteToChar(bLettre:Byte):string;
    var strRes:string;
    begin 
         case bLettre of
         0..9:strRes := IntToStr(bLettre); 
         else 
             strRes := Chr(65 + bLettre - 10); 
         end; 
         Result := strRes; 
    end;
    Merci d'avance

  2. #2
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    En fait tu travailles avec des chaînes en hexadécimal, non ?

    Si oui va voir IntToHex et StrToInt (pour cette dernière, rajouter '$' devant le nombre hexa en chaîne).

    Donc CharToByte devient StrToInt('$'+C) et ByteToChar devient IntToHex(B)[1].
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  3. #3
    Candidat au Club
    Inscrit en
    Septembre 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    En fait, non, mes chaînes sont initialement en format ascii classique.
    Mais effectivement, les fonctions que tu as indiquées devraient convenir, la conversion ascii -> hex string ne devant pas être trop compliquée...

  4. #4
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Si la on recherche la même représentation binaire du char et du byte, on peut
    1) soit utiliser la directive absolute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var c : char ; b : byte absolute c ;
    ou alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var b : byte ; c : char absolute b ;
    Dans ce cas, si on modifie c, b est modifié et réciproquement.

    1) soit utiliser la directive ord et char]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var b : byte ; c: char ;
    b:=ord(c) ;
    et
    c:=char(b) ;
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  5. #5
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Salut

    Perso, j'utilise ces 2 fonctions :
    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
    {----------------------------------------------------------------}
    { CONVERSION STRING -> CODE HEXADECIMAL                          }
    {----------------------------------------------------------------}
    Function MyUrlEncode(Const st: String): String;
    Var x: Integer;
    Begin
      Result := '';
      If (st = '') Then Exit;
      For x := 1 To Length(st) Do
        Result := Result + IntToHex(Ord(st[x]), 2);
    End;
     
     
    {----------------------------------------------------------------}
    { CONVERSION CODE HEXADECIMAL -> STRING                          }
    {----------------------------------------------------------------}
    Function MyUrlDecode(Const st: String): String;
    Var x: Integer;
    Begin
      Result := '';
      If (Length(st) < 2) Then Exit;
      x := 1;
      Repeat
        Result := Result + Chr(Byte(StrToInt('$' + st[x] + st[x + 1])));
        x := x + 2;
      Until (x >= Length(st));
    End;
    De retour parmis vous après 10 ans!!

  6. #6
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    N'oubli pas d'ajouter le tag [Résolu] (bouton an bas de ce message)
    De retour parmis vous après 10 ans!!

  7. #7
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    J'ai trouvé une méthode beaucoups plus rapide pour la conversion d'une chaine vers une chaîne hexa. La différence est incroyable. Par contre, je n'ai pas encore trouvé comment obtenir la conversion inverse avec le même genre de code :
    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
    Function StrToHexStr(source: String): String;
    Var
      i: Cardinal;
      x: Integer;
      achar: ShortString;
    Begin
      Result := '';
      If (source = '') Then Exit;
      SetLength(Result, Length(source) * 2);
      x := 2;
      For i := 1 To Length(source) Do Begin
        achar := Format('%x', [Integer(source[i])]);
        If Length(achar) = 1 Then achar := '0' + achar;
        Result[x - 1] := achar[1];
        Result[x] := achar[2];
        Inc(x, 2);
      End;
    End;
    De retour parmis vous après 10 ans!!

  8. #8
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut Sub0 !

    Sympa cette fonction de conversion
    Une toute petite remarque: Ces 2 lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        achar := Format('%x', [Integer(source[i])]);
        If Length(achar) = 1 Then achar := '0' + achar;
    peuvent être remplacées ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        achar := Format('%.2x', [Integer(source[i])]);
    Pour la fonction inverse j'ai abouti au même code que le tien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function HexStrToStr(Source: string): string;
    var
      i: Integer;
    begin
      Result := '';
      If (source = '') Then Exit;
      i := 1;
      repeat
        Result := Result + Chr(StrToInt('$' + Copy(Source, i, 2)));
        Inc(i, 2);
      until (i > Length(Source));
    end;
    @+ Claudius

  9. #9
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Citation Envoyé par Claudius40
    Pour la fonction inverse j'ai abouti au même code que le tien
    Tanpis.

    De retour parmis vous après 10 ans!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. String vers byte[]
    Par EpOnYmE187 dans le forum Langage
    Réponses: 8
    Dernier message: 28/10/2011, 11h23
  2. Conversion String vers Byte
    Par nonos58 dans le forum Langage
    Réponses: 8
    Dernier message: 10/05/2011, 15h55
  3. Conversion String vers char
    Par benwit dans le forum Langage
    Réponses: 27
    Dernier message: 30/03/2007, 14h01
  4. conversion string vers une date
    Par fatati dans le forum C++Builder
    Réponses: 7
    Dernier message: 14/12/2006, 10h09
  5. conversion string vers int
    Par mathher dans le forum C++
    Réponses: 4
    Dernier message: 14/04/2006, 17h52

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