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

MATLAB Discussion :

String en tableau


Sujet :

MATLAB

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 135
    Points : 46
    Points
    46
    Par défaut String en tableau
    Bonjour,

    Je récupère une chaine de caractère en utilisant la commande inputdlg.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    prompt = {'Entrer un mot ou une phrase:'};
    dlg_title = 'Mot ou phrase';
    num_lines = 1;
    def = {'1'};
    Z = inputdlg(prompt,dlg_title,num_lines,def)
    Je voudrais savoir si une fonction existe pour stocker chaque lettre de la chaine dans un tableau, chaque lettre serait stocké en binaire. Je pourrais donc effectuer ces opérations : Pseudo-code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    A=xor(Z[i](1:8),Z[i](p:16))
    avec i l'indice dans le tableau et Z[i](1:8) les 8 premiers bits de la lettre et Z[i](9:16) les 8 derniers.

    Merci d'avance

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    Salut, tu peux regarder du côté de dec2bin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    help dec2bin
     
    >> dec2bin('A')
    ans =
    1000001
     
    >> A=dec2bin('coucou')
    A =
    1100011
    1101111
    1110101
    1100011
    1101111
    1110101
    Le résultat étant de class char, tu as accès à tous les chiffres...

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 135
    Points : 46
    Points
    46
    Par défaut
    J'ai déjà regarder cette option mais je ne trouve pas comment faire pour lire les 4 premiers bits de la lettre A par exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    prompt = {'Entrer un mot ou une phrase:'};
    dlg_title = 'Mot ou phrase';
    num_lines = 1;
    def = {'1'};
    Z = inputdlg(prompt,dlg_title,num_lines,def)
    Z = cell2mat(Z)
    Z = dec2bin(Z)
    Résultat :
    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
    Z = 
     
        'ABCDE'
     
     
    Z =
     
    ABCDE
     
     
    Z =
     
    1000001
    1000010
    1000011
    1000100
    1000101
    Je traite ces données par la suite mais je ne peux pas faire :
    Z[1](1:4) ne donne pas 1000
    et Z[2](4:7) ne donne pas 010

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    Faut juste appeler correctement ton résultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >> A=dec2bin('coucou')
    A =
    1100011
    1101111
    1110101
    1100011
    1101111
    1110101
     
    >> A(1,1:4)
    ans =
    1100

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 135
    Points : 46
    Points
    46
    Par défaut
    Ah oui effectivement, Merci.
    J'ai une autre question, je voudrais que toute mes valeurs soit normaliser sur 16 bits mais je ne trouve pas comment faire, il suffit juste de rajouter le bon nombre de zéro devant! Existe t-il une fonction?

    Merci d'avance

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    Heu ca c'est une bonne question. Je ne sais pas si il existe une fonction mais tu peux le faire facilement à partir de tes différents tableaux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    A=dec2bin('coucou')
    [l,c]=size(A);
    for j=1:l
        tampon=0;
     
        for i=1:16-c
            tampon=[tampon '0'];
        end
        tampon(1)=[];
     
     
        B(j,1:16)=[tampon A(j,:)];
     
    end

  7. #7
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    A = dec2bin('coucou',16);
    donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    A =
     
    0000000001100011
    0000000001101111
    0000000001110101
    0000000001100011
    0000000001101111
    0000000001110101
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    Ha oui, c'est un peu moins bourin que ma méthode

    Faudrait qu'un jour, je me mette à lire dans le détail la doc d'une fonction que je donne en exemple

  9. #9
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 135
    Points : 46
    Points
    46
    Par défaut
    Merci Merel et Dut.
    Effectivement c'était pas très compliqué.

    J'ai un autre souci que je ne comprends pas, quand Z est une matrice de un élément cela fonctionne mais quand j'adapte mon code pour traiter une matrice de plusieurs éléments cela ne fonctionne pas et j'obtiens une erreur.
    Code qui fonctionne avec un élément :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    A=xor(Z(9:end),K);
    B=xor(A,Z(1:8));
    Z(1:8)=Z(9:end);
    Z(9:end)=B;
    Code qui ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for a=1:n
    A=xor(Z(a,9:end),K);
    B=xor(A,Z(a,1:8));
    Z(a,1:8)=Z(a,9:end);
    Z(a,9:end)=B;
    end
     
    ??? Conversion to char from logical is not possible.
     
    Error in ==> crypt at 29
    Z(a,9:end)=B;
    Merci

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    C'est étonnant que ca fonctionne pour 1 élément.
    Cette ligne
    ne peut pas fonctionner puisque Z est un tableau de caractère et B est un vecteur logique. Je n'ai pas trouvé pour le moment la conversion du logique au chaine de caractère.

    Par contre, tu peux apparemment utiliser bitxor pour ne pas avoir une sortie logique. Mais il faut à ce moment là que Z ne soit pas une chaine de caractère ce qui fait sauter les "0" que tu as au début...

    C'est un problème qui se mort la queue...

  11. #11
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 135
    Points : 46
    Points
    46
    Par défaut
    Oui avec bitxor, j'obtiens cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ??? Undefined function or method 'bitxor' for input arguments of type 'char'.
    Donc effectivement je tourne un peu en rond la!

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    C'est bon, j'ai trouvé. Je suis pas réveillé moi aujourd'hui. Je cherche depuis tout à l'heure des trucs avec char et string alors qu'il fallait utiliser num2str.

    Bref, voici un truc qui fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Z=dec2bin('a',16)
     
    A=xor(Z(9:end),1);
    B=xor(A,Z(1:8));
    Z(1:8)=Z(9:end);
    C=num2str(double(B));
    C(C==' ')=[];
    Z(9:end)=C
    Par contre comme tu le verras, la conversion de ton B logique en C rajoute des cases vides que je supprime.

  13. #13
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 135
    Points : 46
    Points
    46
    Par défaut
    Okay.
    Merci bien à vous deux!

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

Discussions similaires

  1. Convertir une string en tableau de caractères
    Par alainpeniche dans le forum C++
    Réponses: 4
    Dernier message: 06/01/2007, 20h00
  2. Réponses: 1
    Dernier message: 24/12/2005, 14h18
  3. String comme tableau de caracteres
    Par malek_dz77 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 10/12/2005, 19h11
  4. char *, string et tableau statique ou dynamique
    Par salseropom dans le forum C
    Réponses: 2
    Dernier message: 05/12/2005, 11h33
  5. problème our passer des string dans tableau d'int
    Par Battosaiii dans le forum C++
    Réponses: 9
    Dernier message: 15/07/2004, 17h42

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