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 :

Récuperer dans une chaine la valeur binaire d'un entier


Sujet :

Langage Delphi

  1. #1
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut Récuperer dans une chaine la valeur binaire d'un entier
    Bonjour à tous,

    J'ai un entier codé sur 9 bits (0 à 511) et j'aimerais récuperer sa valeur binaire dans une chaine (ex: '110010110').

    Ca fait un bout de temps que je bricole avec les fonctions byte, chr, HexToBin et compagnie mais je n'arrive à rien en sortir !

    Comment faire ?

    Merci d'avance.

  2. #2
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    J'ai bricolé une fonction que j'ai trouvée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function integerToByte(x: integer): string;
    var i: integer; 
    begin 
      result := '';
      if x > 511 then exit;
      for i := 8 downto 0 do begin
        if x DIV (1 shl i) <> 0 then begin
          x := x MOD (1 shl i);
          result := result + '1' 
        end else
          result := result + '0';
      end;// Fin for
    end;
    Est ce que c'est ce qu'il y a de plus rapide et efficace ?
    (En fait, ce qui me gène, c'est le fait qu'il y a 9 bits, n'y a t-il pas de risque d'erreurs avec un int ?)

  3. #3
    Membre actif
    Profil pro
    ----
    Inscrit en
    Mai 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ----

    Informations forums :
    Inscription : Mai 2004
    Messages : 185
    Points : 245
    Points
    245
    Par défaut
    IntToBin si tu a un entier à l'origine... si non IntToBin(StrToInt())

  4. #4
    Membre actif
    Profil pro
    ----
    Inscrit en
    Mai 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ----

    Informations forums :
    Inscription : Mai 2004
    Messages : 185
    Points : 245
    Points
    245
    Par défaut
    Si tu a 9bits, et que les bits 9 a x tu t'en fout... dans ce cas, tu ne fait que couper la chaine avec ma méthode... ton system et bon... mais tu devrait, plutot que sortir en cas de > 511, faire un x := X and 511
    Comme ça tu auras force les bits de poids fort a 0

  5. #5
    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
    Ton entier, tu l'as stocké dans quel genre de variable ? Un Integer, ou un string ? Parce que l'expression "entier stocké sur 9 bits" me dis que ça n'existe pas en Delphi : 8bits, 16 bits, 32 bits oui, mais 9 bits, non.

    Sinon, des fonctions IntToBin, il y en a en pagaille sur internet et sur ce forum, exemple fait maison :

    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
    function Int_To_BinString(AInteger:cardinal):string;
    var s:string;
          bit_num:integer;
          bit_value:cardinal;
    begin
       //initialisations
       s:='';
       bit_value:=1;
       bit_value:=bit_value shl 31; //équivalent à bit_value:=2 puissance 32;
     
      //calcul
       for bit_num:=32 downto 1 do
       begin
          if (bit_value and AInteger)=bit_value 
          then begin
                    s:=s+'1';
                 end
          else begin
                    if s<>'' then //comme ça, ca n'écrit pas les zéro du début, donc la ligne est en option
                    if bit_num<=9 then //comme ça on ne tiens compte que des 9bits
                    s:=s+'0'; 
                 end;
          bit_value:=bit_value shr 1; //pareil que bit_value:=bit_value div 2;
       end;
      result:=s;
    end;

  6. #6
    Membre actif
    Profil pro
    ----
    Inscrit en
    Mai 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ----

    Informations forums :
    Inscription : Mai 2004
    Messages : 185
    Points : 245
    Points
    245
    Par défaut
    @waskol : IntToBin est de base dans delphi (du moins à partir de la version 6 de sur )

  7. #7
    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
    Citation Envoyé par /dev/null
    @waskol : IntToBin est de base dans delphi (du moins à partir de la version 6 de sur )
    Certes, mais ça se trouve, notre amis est sous Delphi 1 et puis ma fonction vire les zéros du début et se limite au 9 bits inférieurs (c'est bien le sujet posé, n'est-ce pas ?) !

  8. #8
    Membre actif
    Profil pro
    ----
    Inscrit en
    Mai 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ----

    Informations forums :
    Inscription : Mai 2004
    Messages : 185
    Points : 245
    Points
    245
    Par défaut
    waskol: ok

  9. #9
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Bonjour à tous,

    En fait, seuls les 9 derniers bits m'interessent mais je voulais etre sur que je ne prenne pas un type qui n'en contient que 8, c'est tout.

    Sinon, je suis en Delphi 2005 et inttoBin n'a pas l'air d'être dans les bibliotheques par défaut car il ne la connait pas.

    Masi bon, avec vos conseils, j'ai réussi à répondre à mon problème, merci.

  10. #10
    Membre actif
    Profil pro
    ----
    Inscrit en
    Mai 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ----

    Informations forums :
    Inscription : Mai 2004
    Messages : 185
    Points : 245
    Points
    245
    Par défaut
    OK ... Bizare ça... je ne pensais pas que nous pouvions avoir la disparition de fonctionnalité . Je connais relativement mal D8

  11. #11
    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
    Citation Envoyé par /dev/null
    OK ... Bizare ça... je ne pensais pas que nous pouvions avoir la disparition de fonctionnalité . Je connais relativement mal D8
    Tu vois, maintenant, la fonction existe pour Delphi 2005 aussi

  12. #12
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Ui, c'est sur, mais je préfère quand même utiliser les fonctions de Delphi quand il y en a, elles sont forçément plus optimisées.

    Je me souvient encore (il n'y a pas si longtemps) quand je voulais faire moi même mon calcul de modulo sur un grand chiffre... J'avais le temps de laver ma bagnole pendant le traitement !

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

Discussions similaires

  1. [Débutant] [C#] Récuperer dans une liste les valeurs d'une listbox à choix multiples
    Par Devlin111 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 21/03/2012, 09h35
  2. [Batch] Récuperer dans une variable, la valeur d'une commande
    Par SanTa62 dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 06/07/2010, 18h08
  3. récuperer un caractere dans une chaine
    Par amill dans le forum Langage
    Réponses: 2
    Dernier message: 17/04/2007, 17h16
  4. Remplacement d'une valeur hexa dans une chaine
    Par raoulchatigre dans le forum C++
    Réponses: 7
    Dernier message: 18/09/2006, 16h27
  5. Récuperer un nombre dans une chaine de caractère
    Par ColonelHati dans le forum C
    Réponses: 4
    Dernier message: 27/04/2005, 14h50

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