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 :

Conversion d'une chaîne en tableau d'octets


Sujet :

Langage Delphi

  1. #1
    Membre actif Avatar de marsupilami34
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    575
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 575
    Points : 262
    Points
    262
    Par défaut Conversion d'une chaîne en tableau d'octets
    Bonjour,
    je cherche à connaitre la fonction qui me permet de faire conversion d'une chaine en tableau d'octet.
    Par avance merci.

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    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
    type
      TStringBytes = array of Byte;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
     
    function ConvertStringToBytes(Text: String): TStringBytes;
    var
      i: Integer;
    begin
      SetLength(Result, Length(Text));
      for i := 1 to Length(Text) do
      begin
        Result[i-1] := Ord(Text[i]);
      end;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Tab: TStringBytes;
      S: String;
      I: Integer;
    begin
      S := '';
      Tab := ConvertStringToBytes(Edit1.Text);
     
      for i := low(Tab) to High(Tab) do
        S := S+IntToStr(Tab[i])+#13+#10;
     
      ShowMessage(S);
    end;
    Comme ca peut être ?

  3. #3
    Membre actif Avatar de marsupilami34
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    575
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 575
    Points : 262
    Points
    262
    Par défaut
    merci pour tout.
    ca marche nikel.

  4. #4
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Que je ne m'abuse : une string c'est déjà un tableau d'octets !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var s:string;
    ...
    s:='Bonjour';
    s[0] contient le nombre de caractères (d'octets) de la chaîne, donc
    s[0]=7 !, c'est l'équivalent de length(s);

    s[1] contient le code ascii de 'B' donc

    ou bien

    donnent S='Aonjour';

    Je ne vois pas où est le problême...

  5. #5
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    waskol est vrait
    +
    celon les obtion de votre compilo , string veu dire une short ou long string
    si long string je sais pas si s[0]=longth(s) a vérifier,, car long sting c'est 4 gk , et s[0] ne peut contenir que 255 ok

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Citation Envoyé par waskol
    Que je ne m'abuse : une string c'est déjà un tableau d'octets !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var s:string;
    ...
    s:='Bonjour';
    s[0] contient le nombre de caractères (d'octets) de la chaîne, donc
    s[0]=7 !, c'est l'équivalent de length(s);

    s[1] contient le code ascii de 'B' donc

    ou bien

    donnent S='Aonjour';

    Je ne vois pas où est le problême...
    On fume la moquette
    Franchement, le type String se gère comme cela .
    Si tu appelles un S[0] , une belle exception est générée.

    Maintenant, mais cela m'étonnerait, c'est peut être valable pour d'autre Type chaine. (Ou alors en C, C++,etc...)

  7. #7
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    Citation Envoyé par edam
    waskol est vrait
    +
    celon les obtion de votre compilo , string veu dire une short ou long string
    si long string je sais pas si s[0]=longth(s) a vérifier,, car long sting c'est 4 gk , et s[0] ne peut contenir que 255 ok

  8. #8
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Hé bien non si tu appelles s[0] pour lire ce qu'il y a dedans, no problemo !!!

    Si c'est pour écrire dedans, non plus !!!

    exemples :
    --> Aucun problême mon garçon !

    -->là non plus !

    -->là non plus ! mais attention : l'emplacement mémoire du feu s[7] (autrement dit ce qui contenait 'r') n'est pas libéré ! (fuite mémoire ?)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    s[0]:=8
    Affiche(s[8])
    s[8]:=22
    -->pour les premières et 2eme ligne, ça marche, sauf quand la chaîne sera libéré par l'application ! Et attention donc : ça empiete surement sur un emplacement mémoire déjà utilisé par autre chose...

    pour pouvoir changer la taille de ta chaîne il faut en fait utiliser :
    Conclusion :
    S est un tableau indicé de 0 à s[0], je ne vois pas où est le problème pour lire et ecrire les valeurs directements aux indices qui vont de 1 à s[0]...

    Tu fait bien pareil avec un tableau normal non ?
    Va réviser l'aide delphi ! Moi je n'ai pas fumé !

  9. #9
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    naaaaaaaaan
    change tes option de string en longstring et voir
    tu peut modifer s[0] seulement si s est une shortstring car avec tu as déjà loué une zone memoir de 255 ok par contre avec une longstring c'est un pointeur de char présque comme un pchar a différence de 8 ok négatife (avant s[0], 4 ok de tailmax et 4 ok de je sais pas koi) et pchar avec un chr(0) a la fin. voir laide en ligne

  10. #10
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Mille excuses alors .
    Dans mes dents

  11. #11
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    autre idée si tu veux utlisé les code ascci des caratére sans passé par ord
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      s:string[255];
      t:array[0..255] of byte absolute s;
      la t[0]= length(s)

  12. #12
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Exact, le code suivant ne marche pas si l'option 'Chaînes vastes' est activée, sinon si :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.Button1Click(Sender: TObject);
    var s:string;
    begin
      s:='Bonjour';
      memo1.Lines.Add(IntToStr(ord(s[0])));
      s[0]:=chr(6);
      memo1.Lines.Add(s);
    end;
    par contre, ça, ça marche toujours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.Button1Click(Sender: TObject);
    var s:string;
    begin
      s:='Bonjour';
      memo1.Lines.Add(IntToStr(ord(s[1])));
      memo1.Lines.Add(s);
      s[3]:='V';
      s[4]:=chr(90);
      memo1.Lines.Add(s);
    end;

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

Discussions similaires

  1. [Java] Conversion d'une chaîne html en unicode
    Par kroax dans le forum Langage
    Réponses: 3
    Dernier message: 27/11/2007, 15h51
  2. conversion d'une chaîne hexadécimale en 3 int
    Par loacast dans le forum C++
    Réponses: 2
    Dernier message: 27/02/2007, 15h45
  3. [VBA-E]Passer d'une chaîne à un tableau
    Par rond24 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/07/2006, 18h55
  4. Réponses: 4
    Dernier message: 21/09/2005, 17h35
  5. [datetime] conversion d'une chaîne en une date + heure
    Par jean-jacques varvenne dans le forum Général Python
    Réponses: 2
    Dernier message: 07/04/2005, 10h43

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