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 :

affecter du Binaire / Hexa dans un char ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 86
    Par défaut affecter du Binaire / Hexa dans un char ?
    Bonjour à tous, avec un amis on programme un petit soft client / serveur en C pour les cours.

    Il s'occupe de la partie socket (ce qui me convient très bien), et je vais m'occuper de la partie codage / décodage des messages + action.

    Le soft est un peu bidon, nous allons faire un logiciel de gestion de contact client / serveur en ligne de commande (pour les cours).

    le client peut ajouter, supprimer, rechercher ce qu'il y à sur le serveur.

    Imposé : travailler en binaire pour raccourcir les messages.

    du fait, on à un " entête " coder sur 3 bits.

    inventaire des entêtes coté serveur:

    - 000 ajouter un contact
    - 001 supprimer un contact
    - 010 rechercher un contact
    - 011 afficher les informations d'un contact donné.

    coté client en réponse :

    - 100 client ajouté avec succès
    - 101 client supprimer avec succès
    - 110 résultat de recherche
    - 111 affichage du contact demander

    Cette partie de mon travail est donc ok, seulement soucis ... ma partie va ce greffer au socket de mon amis, et de son coté il va me donner un char lors des communications.

    De ce coté la, je suis emmerdé ... j'ai besoin de créer une variable char avec une trame complète 000.

    En gros je veux rentrer du binaire dans un char en attendant que son socket fonctionne, le tout pour aller lire les différents bits qui m'intéresse, suivant l'entête je sais que j'aurais nom, prénom, adresse, ou un ordre d'ajout, de suppression etc ...

    Bref, je sais comment coder mes trames sur papier, mais pas m'y prendre avec ce foutu char...

    Je ne sais pas non plus si c'est mieux de travailler en suite sur un char créer une trame binaire, ou plutôt entier afin de généré une trame comprenant nom, prénom, adresse, etc ...

    Je m'en remet à vous pour me mettre sur la voie après avoir googler toute la journée sans rien trouvé de probant.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 486
    Par défaut
    Bonsoir,

    Pour manipuler des bits au sein d'une variable entière de type natif, on utilise les opérateurs logiques bit à bit. Le ET « & », le OU « | », éventuellement le OU Exclusif « ^ » et le NOT « ~ ».

    — Un OU logique est vrai si l'une ou l'autre (ou les deux, donc) des opérandes est vraie. C'est donc l'équivalent de l'UNION mathématique : tous les bits marqués à un dans le masque seront forcés à un dans le résultat, les autres resteront identiques.
    — Un ET logique n'est vrai que si l'une et l'autre (les deux à la fois) des opérandes sont vraies. C'est donc l'équivalent de l'INTERSECTION. Tous les bits à zéro dans le masque seront forcés à zéro dans le résultat, les autres resteront identiques.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 86
    Par défaut
    Les opérateurs Et / Ou je les connais,

    Avant de passer de char à entier, faudrait que je puisse avoir mon message binaire affecter à mon char, puisque le socket me donnera un Char.

    J'en suis déjà bloqué à cette étape.

    En suite, probablement faire une conversion ou je ne sais pas quoi, pour passer du char vers de l'entier, ou du long je sais pas.

    La longueur moyenne de mes messages fait environ 64 Quartets, donc environ 32 octets, sa ferais dans les 32 caractères ascii environ.

    Je ne sais pas si le chiffre obtenu après conversion décimale peut être stocké dans un entier, un entier long ou autre chose ... en fait je ne maitrise pas trop ce que je dois faire, je venais ici pour apprendre ^^.

    Citation Envoyé par Obsidian Voir le message
    Bonsoir,

    Pour manipuler des bits au sein d'une variable entière de type natif, on utilise les opérateurs logiques bit à bit. Le ET « & », le OU « | », éventuellement le OU Exclusif « ^ » et le NOT « ~ ».

    — Un OU logique est vrai si l'une ou l'autre (ou les deux, donc) des opérandes est vraie. C'est donc l'équivalent de l'UNION mathématique : tous les bits marqués à un dans le masque seront forcés à un dans le résultat, les autres resteront identiques.
    — Un ET logique n'est vrai que si l'une et l'autre (les deux à la fois) des opérandes sont vraies. C'est donc l'équivalent de l'INTERSECTION. Tous les bits à zéro dans le masque seront forcés à zéro dans le résultat, les autres resteront identiques.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 86
    Par défaut
    Pour tout vous dire, j'ai déjà un bout de code, qui me permettra de développer des fonctions pour déjà dans un premier temps tester l'entête :

    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
     
     
       /* tester l'état du bit 2 de a : */
       unsigned a = 0x000F; /* 0000 0000 0000 1111 */
     
       if (a & (1u << 2))
       {
          puts("bit 2 = 1");
       }
       else
       {
          puts("bit 2 = 0");
       }
     
       /* on peut aussi directement recuperer la valeur 0 ou 1
          a l'aide des proprietes de l'operateur logique ! : */
       printf ("bit 2 = %d\n", !!(a & (1u << 2)));
    Ce code fonctionne bien, il marche si je remplace unsigned a par int a;

    c'est ce que je veux, par contre j'ai besoin de partir d'un char ...

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 486
    Par défaut
    Si c'est ce qui t'ennuie, en C, « char » est en soi un type entier. Tu peux donc directement travailler dessus.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 86
    Par défaut
    C'est une chose que je ne savais pas, qui m'aidera pas mal.

    Maintenant, comment y rentrer ma trame " simulé " de façon à la décoder coté serveur, ou inversement, comment la mettre dans un char coté client une fois créer ?

    Je peu soit le faire avec de l'hexa, ça me convient très bien, ou du binaire.

    J'ai essayé ça :

    Char test[200];

    test = 0x530448275849385756894284AFFFABDDE5AC;

    Mais ça n'a pas fonctionné ...

    Je ne maitrise pas le type char en fait, je viens du Visual Basic.net à la base, le langage C nous est imposé par la prof donc pas trop le choix.

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/11/2008, 15h51
  2. Réponses: 10
    Dernier message: 19/06/2006, 19h04
  3. Réponses: 2
    Dernier message: 19/01/2006, 18h58
  4. Insertion d'un char dans un char *
    Par bugmenot dans le forum C
    Réponses: 2
    Dernier message: 22/10/2005, 15h17
  5. Réponses: 6
    Dernier message: 06/10/2005, 11h30

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