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 :

Récupération d'une chaîne binaire de 8 bits écrite dans une variable string


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2012
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 15
    Par défaut Récupération d'une chaîne binaire de 8 bits écrite dans une variable string
    Bonjour,

    je suis débutant et suis bloqué sur mon programme. En fait, je dois récupérer une chaîne binaire de 8 bits écrite dans une variable string pour la mettre en code équivalent en HEXADECIMAL etc. Désolé si je m'explique mal, le but de mon programme est la manipulation dans les fichiers ; je dois absolument récupérer mon résultat string afin de pouvoir l'écrire à nouveau. J'ai cherché et je ne trouve pas. Voici un exemple :

    variablestring := '11111111';

    Comment pourrais-je récupérer la valeur 255 dans une variable pour écrire mon octet ? Pour le moment ma seule solution serait un comparateur de string 0 à 255, mais c'est embêtant tous les binaires dans un tableau string pour comparer, ouff.
    Si vous pouvez m'aider merci d'avance .

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 172
    Billets dans le blog
    9
    Par défaut
    Bonjour !

    Voici ma proposition. Il y a sûrement mieux comme code, mais enfin je crois que le principe de la solution est celui-ci.

    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
    program exemple; (* conversion d'un octet en byte *)
     
    {$APPTYPE CONSOLE}
     
    type
      octet = string[8];
     
    function deux_puissance(n: byte): longint;
      var
        i: byte;
        temp: longint;
      begin
        if n=0 then temp:=1
        else
          begin
            if n=1 then temp:=2
            else
              begin
                temp:=2;
                for i:=2 to n do
                  temp:=2*temp;
              end;
          end;
        deux_puissance:=temp;
      end;
     
    function decimale(o: octet): byte;
      var
        i: byte;
        temp: byte;
      begin
        temp := 0;
        for i := length(o) downto 1 do
          begin
            if o[i] = '1' then temp := temp + deux_puissance(length(o)-i);
          end;
        decimale := temp;
      end;
     
    begin
      writeln(decimale('11111111')); (* 255 *)
      readln;
    end.

  3. #3
    Membre averti
    Inscrit en
    Juin 2012
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 15
    Par défaut
    Bonjour et merci pour ta réponse. Cependant j'ai essayé mais j'ai un plantage direct ?
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    unit Unit1;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
     
      public
        { Déclarations publiques }
     
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    type
     octet = string[8];
     
    function deux_puissance(n: byte): longint;
      var
        i: byte;
        temp: longint;
      begin
        if n=0 then temp:=1
        else
          begin
            if n=1 then temp:=2
            else
              begin
                temp:=2;
                for i:=2 to n do
                  temp:=2*temp;
              end;
          end;
        deux_puissance:=temp;
      end;
     
    function decimale(o: octet): byte;
      var
        i: byte;
        temp: byte;
      begin
        temp := 0;
        for i := length(o) downto 1 do
          begin
            if o[i] = '1' then temp := temp + deux_puissance(length(o)-i);
          end;
        decimale := temp;
      end;
     
    procedure TForm1.Button1Click(Sender: TObject);
      begin
     //program exemple; (* conversion d'un octet en byte *)
     //{$APPTYPE CONSOLE}
      writeln(decimale('11111111')); (* 255 *)
      readln;
    end;
     
    end.

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 172
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par rogerpierre Voir le message
    bonjour et merci pour ta reponsse cepandant j'ai essayer mais j'ai un plantage direct ?
    Sers-toi des balises appropriées pour poster ton code.

    Je ne suis pas un grand spécialiste de Delphi. J'ai testé mon programme avec Delphi 6 avant de le poster : ça fonctionne. J'ai lu ton code, je ne saurais pas te dire pourquoi ça ne marche pas.

    Quel est le message d'erreur ?

  5. #5
    Membre averti
    Inscrit en
    Juin 2012
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 15
    Par défaut
    re désoler ses la premiere fois sur le forum et ses pas bien utiliser.

    quand je lance sa marche , et au moment je clic bouton :

    classe d'exseption EInOutError avec le message 'Erreur E/S 105'

    voici pour le 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
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    unit Unit1;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
     
      public
        { Déclarations publiques }
     
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    type
     octet = string[8];
     
    function deux_puissance(n: byte): longint;
      var
        i: byte;
        temp: longint;
      begin
       if n=0 then temp:=1
        else
          begin
            if n=1 then temp:=2
            else
              begin
                temp:=2;
                for i:=2 to n do
                  temp:=2*temp;
              end;
          end;
        deux_puissance:=temp;
      end;
     
    function decimale(o: octet): byte;
      var
        i: byte;
        temp: byte;
      begin
        temp := 0;
        for i := length(o) downto 1 do
          begin
            if o[i] = '1' then temp := temp + deux_puissance(length(o)-i);
          end;
        decimale := temp;
      end;
     
    procedure TForm1.Button1Click(Sender: TObject);
      begin
     //program exemple; (* conversion d'un octet en byte *)
     //{$APPTYPE CONSOLE}
      writeln(decimale('11111111')); (* 255 *)
      readln;
    end;
     
    end.

  6. #6
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 172
    Billets dans le blog
    9
    Par défaut
    Réflexion faite, je crois voir ce qui ne va pas. Je ne pense pas qu'on puisse utiliser les procédures writeln et readln dans un TForm. Ce sont des procédures pour le mode console. Il faut te servir d'un exemple pour trouver l'écriture appropriée.

  7. #7
    Membre averti
    Inscrit en
    Juin 2012
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 15
    Par défaut
    voila j'ai trouver sa marche merci a toi, en fete me faut afficher comme sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      ShowMessage(IntToStr(decimale('11110111'))); (* 255 *)
    par contre quand je ferme la boite de dialogue j'ai le message 'Erreur E/S 6'

    la je ses pas pour quoi bizard ..

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 09/05/2013, 17h27
  2. Réponses: 3
    Dernier message: 05/02/2010, 03h45
  3. Réponses: 1
    Dernier message: 26/09/2008, 16h38
  4. Réponses: 3
    Dernier message: 04/07/2008, 12h00
  5. Réponses: 3
    Dernier message: 30/04/2007, 12h22

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