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 :

Décomposition d'un Char


Sujet :

C

  1. #1
    Membre à l'essai Avatar de beau_g
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2017
    Messages : 26
    Points : 24
    Points
    24
    Par défaut Décomposition d'un Char
    Bonjour à tous,
    je voudrai savoir comment je peux faire pour décomposer un élément de type "char" en plusieurs éléments de type"char" tel que :

    Ce char :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char charIP = "10001101000110111000110010001101"
    Devienne 4 éléments de type char également :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char char1 = "10001101"
    char char2 = "00011011"
    char char3 = "10001100"
    char char4 = "10001101"
    jamais pensais à un code comme celui-ci mais sans résultat :/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for(r=0; r<32; r++)
    			{
    					if (r>=0 && r<8)
    						strcat(terme1,devicePrototype.addUnicast[r]);
    					if (r>=8 && r<16)
    						strcat(terme2, devicePrototype.addUnicast[r]);
    					if (r>=16 && r<24)
    						strcat(terme3, devicePrototype.addUnicast[r]);
    					if (r>=24 && r<32)
    						strcat(terme4, devicePrototype.addUnicast[r]);
     
    			}
    Merci d'avance !

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Non testé, non compilé

    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
    char* charIP = "10001101000110111000110010001101";
     
    char char1[9];
    char char2[9];
    char char3[9];
    char char4[9];
     
    unsigned char bit;
     
    for(bit = 0; bit < 8; ++bit) { char1[bit] = charIP[bit]; }
    char1[8] = '\0';
    for(; bit < 16; ++bit) { char2[bit -  8] = charIP[bit]; }
    char2[8] ='\0';
    for(; bit < 24; ++bit) { char3[bit - 16] = charIP[bit]; }
    char3[8] = '\0';
    for(; bit < 32; ++bit) { char4[bit - 24] = charIP[bit]; }
    char4[8] = '\0';

  3. #3
    Membre à l'essai Avatar de beau_g
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2017
    Messages : 26
    Points : 24
    Points
    24
    Par défaut
    Suuuspens !
    Malheureusement ça ne marche pas
    Mais merci pour ta réponse rapide
    voilà le résultat:
    Nom : oui.PNG
Affichages : 320
Taille : 2,9 Ko

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Alerte ! Alerte ! Ce ne sont pas des char qui sont des caractères simples. Ce sont des chaines de caractères qui en C sont des char* !!!

    Et ca un compilateur bien réglé doit crier en voyant ça.... Comment compiles-tu ton programme ?

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Citation Envoyé par beau_g Voir le message
    Malheureusement ça ne marche pas
    Si cela fonctionne à un gros détail près (<- j'ai mis à jour mon code)

    Citation Envoyé par Bktero Voir le message
    En C sont des char* !!!
    Tu as raison j'ai mis à jour mon code

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Pourquoi ne pas utiliser strncpy() ?

    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
    #include <string.h>
    #include <stdio.h>
     
    int main(void)
    {
        const char* ip = "10001101000110111000110010001101"; // notez l’utilisation de const
     
        char part1[9] = {0};
        char part2[9] = {0};
        char part3[9] = {0};
        char part4[9] = {0}; // 9 = 8 caractères utiles + 1 caractère terminal ('0' == 0)
     
        strncpy(part1, ip, 8);
        strncpy(part2, ip + 8, 8);
        strncpy(part3, ip + 16, 8);
        strncpy(part4, ip + 24, 8); // ça fait beaucoup de 8... On pourrait de créer une constante avec #define 
     
        puts(ip);
        puts(part1);
        puts(part2);
        puts(part3);
        puts(part4);
    }

  7. #7
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    strcpy memcpy est plus indiqué ici puisque l'on ne cherche pas à copier au plus 8 caractères mais bien exactement ce nombre.

    EDIT: merci Bktero !

  8. #8
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    strcpy() ne te permet pas de préciser de longueur mini, maxi ou exacte ; elle copie jusqu'à trouver un caractère de fin de chaine. Comment t'en servirais-tu ici ?

  9. #9
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Tu as tout-à-fait raison, il s'agit d'une coquille. J'entendais bien sûr memcpy.

  10. #10
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Auquel cas je valide !

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/07/2003, 16h24
  2. Décomposition RGB
    Par Claythest dans le forum Langage
    Réponses: 3
    Dernier message: 16/06/2003, 11h35
  3. [PostgreSql] Problème de cadreage de char !!!
    Par moipastoi dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/05/2003, 18h01
  4. Réponses: 6
    Dernier message: 24/03/2003, 17h11
  5. Traitement d'un char* renvoyé par une DLL en C++
    Par LuluTchab dans le forum Langage
    Réponses: 4
    Dernier message: 22/03/2003, 21h48

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