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

C Discussion :

Concatener des bytes en C


Sujet :

C

  1. #1
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Par défaut Concatener des bytes en C
    Bonjour,

    Programmant un µC en C je voudrais concaténer deux octects. Je m'explique je lis d'abord le MSB puis le LSB sur mon port SPI. Mais je voudrais afficher les 2 octets ensemble. Donc je pensais concaténer pour afficher MSB LSB. Mais je n'ai pas trouver de commande pour ceci.
    Comment faire?

    Merci

  2. #2
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    concatener des octets ? est ce que tu veux dire un ou ? ou bien un tableau de 2 octets ou enfin un prinft("%x%x",...)?

  3. #3
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Par défaut
    J'ai deux octect : temp_MSB et temps_LSB et je voudrais faire:
    temp = temp_MSB concatener avec temp_LSB pour ensuite afficher temp (qui fait 2 octets du coup).

    En VHDL par exemple ca se fait tout simplement avex un &

  4. #4
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    J'allais ecire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    unsigned char msb, lsb;
    unsigned result = msg << 8 + lsb;
    mais tu mentionnes & en VHDL ce qui ne fonctionne que sur des tableaux si ma memoire est bonne, et donc succite la question tes octets sont representes comment?

  5. #5
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Par défaut
    Ok je vais essayer ce code. Je cherchais un opérateur comme en VHDL mais ca n'a pas l'air d'exister en C. En VHDL j'aurais écris temp = MSB & LSB tout simplement. Cela marche sur des bytes(enfin en VHDL ca serait déclaré stdio_logic_vector (7 downto 0)), il n'y a pas besoin de tableaux. Temps bien sur ferait donc 2 octets.

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 391
    Par défaut
    & est peut-être un opérateur de concaténation en VHDL et en TI-Basic, mais pas en C.
    En C, & est un opérateur de ET binaire bit-à-bit, et il n'existe pas d'opérateur de concaténation en C.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Par défaut
    Ok, ca confirme donc qu'il n'existe pas d'opérateur de concaténation en C, c'est bien ce que je pensais.
    Merci de vos réponses.

  8. #8
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par pegase.90
    Ok je vais essayer ce code. Je cherchais un opérateur comme en VHDL mais ca n'a pas l'air d'exister en C. En VHDL j'aurais écris temp = MSB & LSB tout simplement. Cela marche sur des bytes(enfin en VHDL ca serait déclaré stdio_logic_vector (7 downto 0)), il n'y a pas besoin de tableaux. Temps bien sur ferait donc 2 octets.
    Je sais que ca fait 6 ou 7 ans que je ne m'occupe plus de VHDL, mais std_logic_vector etait a l'epoque un type tableau non contraint. J'ai du mal a croire que ca ait change.

    Le plus proche du C, ce serait d'utiliser un type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    type octet is range 0 .. 255;
    et alors il me semble me souvenir que & n'est pas defini.

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par pegase.90
    Programmant un µC en C je voudrais concaténer deux octects. Je m'explique je lis d'abord le MSB puis le LSB sur mon port SPI. Mais je voudrais afficher les 2 octets ensemble. Donc je pensais concaténer pour afficher MSB LSB. Mais je n'ai pas trouver de commande pour ceci.
    Il faut apprendre à utiliser les opérateurs binaires.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
       unsigned int x = 0;
     
       x |= octet1 << (8 * 1); /* MSB */
       x |= octet2 << (8 * 0); /* LSB */
     
       printf ("x = %04X\n", x);*
    Pose des questions si nécessaire, mais après avoir relu ton livre de C sur la question.

  10. #10
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Pose des questions si nécessaire, mais après avoir relu ton livre de C sur la question.
    Si j'ai posé la question ici c'est que justement je n'avais pas trouvé la réponse dans mon Kernighan. Mais visiblement ce forum a l'air d'être réservé à certains VIP. Désolé pour mes questions de débutants, je ne posterai plus ici.

  11. #11
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 391
    Par défaut
    Ne t'inquiètes pas, c'est Emmanuel qui a un peu oublié le fait que tu viennes d'un monde où les octets sont des tableaux de bits et non des nombres.

    Car n'oublie pas que la concaténation de nombres, ça n'existe pas vraiment...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  12. #12
    Membre émérite

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Par défaut
    Citation Envoyé par pegase.90
    Si j'ai posé la question ici c'est que justement je n'avais pas trouvé la réponse dans mon Kernighan. Mais visiblement ce forum a l'air d'être réservé à certains VIP. Désolé pour mes questions de débutants, je ne posterai plus ici.
    Faut pas le prendre comme ça. Certes, Emmanuel donne l'impression d'être un peu rude et il a l'art de secouer les puces des uns et des autres de temps en temps (souvent à raison) mais, mine de rien, il t'a quand même répondu en te donnant un bout de code qui devrait te permettre de faire ce que tu veux...

  13. #13
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par pegase.90
    Si j'ai posé la question ici c'est que justement je n'avais pas trouvé la réponse dans mon Kernighan. Mais visiblement ce forum a l'air d'être réservé à certains VIP. Désolé pour mes questions de débutants, je ne posterai plus ici.
    Je pense que tu as mal compris le sens de ma remarque. Elle vient suite à un code que j'ai posté qui peut, à juste titre, soulever des questions, étant donné que je n'ai pas donné d'explications. Je te dis simplement que certaines réponses sont probablement dans ton livre de C (par exemple K&R2 Annexe 7.4, p.203 et suivantes). Je ne vois pas ce qu'il y a de choquant là dedans.

  14. #14
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    euh je suis désolé de t'embeter emmanuel mais ca sert a quoi ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x |= octet2 << (8 * 0); /* LSB */

  15. #15
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par hiko-seijuro
    euh je suis désolé de t'embeter emmanuel mais ca sert a quoi ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x |= octet2 << (8 * 0); /* LSB */
    Je suppose que c'est juste pour une question de lisibilité et de compréhension.
    Le code généré doit être le même que si l'on écrit :

  16. #16
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par crocodilex
    Je suppose que c'est juste pour une question de lisibilité et de compréhension.
    Je code généré doit être le même que si l'on écrit :
    Oui, C'est du code copié/collé. Il suffit de changer les coefficients pour faire 16 bits, 32 bits etc. Ou de les inverser si la convention de codage est différente etc. Le compilateur se charge de faire le ménage, je lui fais confiance.

Discussions similaires

  1. concatener des bits
    Par philippe V dans le forum C++
    Réponses: 16
    Dernier message: 23/08/2005, 01h26
  2. [C#] Convertir des bytes en string
    Par sorcer1 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 03/02/2005, 15h52
  3. [VB.NET] Concaténer des images
    Par franculo_caoulene dans le forum ASP.NET
    Réponses: 5
    Dernier message: 26/11/2004, 16h57
  4. concatenation des données d'une table dans une autre
    Par Fabby69 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 04/10/2004, 11h38
  5. Grouper et concatener des résultats
    Par Koo dans le forum Langage SQL
    Réponses: 3
    Dernier message: 07/07/2004, 10h09

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