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

Free Pascal Discussion :

[Free Pascal] Convertir un code ASCII en entier


Sujet :

Free Pascal

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 192
    Points : 176
    Points
    176
    Par défaut [Free Pascal] Convertir un code ASCII en entier
    bonjour,

    je recherche comment convertir un code ASCII dans une chaine en entier...

    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    program testval;
    var     a,c         :string;
            i,r,code  :integer;
    begin
            a:='Bonjour';
            c:=copy(a,1,1);
            val(c,r,code);
            Writeln('a= ',a,' c= ',c,' r= ', r,' cr= ',code);
            readln;
    end.
    je pensais que val allait me le faire mais ça et que j'allais récuperer 66 dans R mais je n'ai que zero et 1 en cr

    merci si vous avez une autre solution
    Un bon exemple vaut mieux qu'une longue explication confuse...

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Euhhhhhhhhhhhh...


    Il faut utiliser chr() et ord(). Merci de consulter l'aide de ton compilateur

    Val et str permet de convertir une chaine en entier et inversement.
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 192
    Points : 176
    Points
    176
    Par défaut
    désolé,

    oui c'est bien ce que je voulais faire convertir une chaine en un entier avec la fonction val mais comme mon compilo freepascal est un peu en anglais et les exemples pas trop explicites.. (pour moi..)


    bon je vais me débrouiller

    tant que j'y suis mon aide de freepascal plante assez svt et j'ai plein de couleur alors je suis opbligé de quitter le compilo et de le relancer .. qq1 connait ce pb ?
    Un bon exemple vaut mieux qu'une longue explication confuse...

  4. #4
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Non ce n'est pas ce que tu veux faire... Toi tu voudrais récupérer le code ASCII d'un caractère dans une chaine. Et pour celà, c'est ord().

    Val permet de convertir une chaine en entier : la chaine s '124' devient l'entier 124. C'est pas du tout la même chose.
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  5. #5
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 192
    Points : 176
    Points
    176
    Par défaut
    Bonjour,

    oui effectivement VAL permet de transformer du numerique d'un chaine dans un integer. (autant pour moi...)

    mon pb perso était le suivant au départ
    dans un chaine j'avais par exemple '10 etc''
    j'ai fait un ptit pb qui a transformé cette chaine en '*etc' (une sorte de compression..)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    z:=copy(a,1,2);
    val(z,k,code);
    k:=ord(k);
    k:=k+32;
    c:=chr(k);
    insert(c,a,1);
    delete(a,2,3);


    maintenant je cherche à retouver mon '10' en retrouvant le 42 du code ascii * auquel j'enleve mes 32 pour avoir 10 de départ (décompression..)

    alors je cherche la fonction... (en Qbasic il y avait un fonction ASC)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PRINT ASC("Q")    'Sortie:  81
    Un bon exemple vaut mieux qu'une longue explication confuse...

  6. #6
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Il faut utiliser ord et str :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var ch: Integer;
    var s: String;
     
    ch := ord(s[1]); { ch = 42 }
    str(ch - 32, s); { s = '10' }
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  7. #7
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Citation Envoyé par JoseF
    alors je cherche la fonction... (en Qbasic il y avait un fonction ASC)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PRINT ASC("Q")    'Sortie:  81
    L'équivalent de ce code est :
    @++
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  8. #8
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 192
    Points : 176
    Points
    176
    Par défaut
    merci !!

    je crois avoir trouvé mon erreur... ça ne marche pas avec une extraction de chaine..


    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
    program testval;
    var     a,b:string;
            c,d:char;
            //i:integer;
    begin
            a:='Bonjour';
            b:=copy(a,1,1);
            c:='Q';
            d:='R';
     
            Writeln('equivalent Basic de ASC(''Q'') Ord(''Q'') ',Ord('Q'));
     
            Writeln(Ord(c)); //ça marche si Char mais pas string :(
            Writeln('ce qu il y a dans B ',b);
            //Writeln(Ord(b)); //marche pas : Type mismatch
           readln;
    end.
    donc maintenant la question que je me pose est de savoir comment convertir une chaine de 1 caracter en char ?

    comme je viens du basic cette notion de char je ne connais pas trop..
    Un bon exemple vaut mieux qu'une longue explication confuse...

  9. #9
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Une chaine est un tableau de caractères... Pour avoir le caractère, il suffit de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    var c: Char;
    var s: String;
    begin
    s := 'salut';
     
    ch := s[1]; // ch = 's';
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  10. #10
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 192
    Points : 176
    Points
    176
    Par défaut
    je crois avoir compris !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Writeln(Ord(b[1])); // ok !

    merci !
    Un bon exemple vaut mieux qu'une longue explication confuse...

  11. #11
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Ou plus simplement a[1]... Copy ne sert absolument à rien
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  12. #12
    Candidat au Club
    Inscrit en
    Avril 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    bonjour j'essai de comprendre comment marche Val ( dans le livre que j'utilise je ne trouve pas) et l'aide du compilateur est pas super clair. il faut ecrire val(S;var u;var Code:integer)

    mais je ne comprends pas vrément a quoi correspond S , var u et var code.

  13. #13
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    S, u et v sont des variables passées en paramètre de la fonction val. Val permet de convertir une chaîne de caractères (string) en entier (integer)
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  14. #14
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

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

Discussions similaires

  1. Convertir un entier en code ASCII
    Par fabpeden dans le forum C
    Réponses: 17
    Dernier message: 03/12/2007, 12h29
  2. [NASM] Convertir en code ascii un nombre binaire
    Par noubigh dans le forum Assembleur
    Réponses: 1
    Dernier message: 29/06/2006, 11h52
  3. Convertir des codes ASCII en lettres
    Par grigri dans le forum Pascal
    Réponses: 4
    Dernier message: 14/04/2006, 11h54
  4. [mx2004]Convertir un code ASCII en une lettre
    Par caramel dans le forum Flash
    Réponses: 3
    Dernier message: 28/01/2004, 16h26

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