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 :

Format hexadécimal ou binaire


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 25
    Points : 14
    Points
    14
    Par défaut Format hexadécimal ou binaire
    salut tous,
    je veux recevoir un flux binaire.
    y a t il une fonction qui formate la lecture en binaire ou en hexadecimal en c?
    (une fonction comme scanf(,"%x",..)?

  2. #2
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    fscanf() ne vous convient-elle pas pour l'hexadécimal?

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 25
    Points : 14
    Points
    14
    Par défaut
    Merci mais je ne connais pas un usage fscanf pour tel but .si vous avez un petit exemple merci de l'envoyer.

  4. #4
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Citation Envoyé par tun07
    Merci mais je ne connais pas un usage fscanf pour tel but .si vous avez un petit exemple merci de l'envoyer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    FILE *f;
    unsigned int i;
    ...
    f=fopen(...,"r");
    ...
    fscanf(f,"%X",&i);
    ...

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par tun07
    je veux recevoir un flux binaire.
    y a t il une fonction qui formate la lecture en binaire ou en hexadecimal en c?
    (une fonction comme scanf(,"%x",..)?
    C'est pas clair.

    Qu'est-ce qu'un flux binaire ou hexadécimal ? Tout flux est une succession de bits groupés par 8.

    Après, le sens qu'on leur donne peut changer d'une application à l'autre.

    Bref, il faut préciser la nature des données lues et les traitement que l'on veut leur appliquer.
    Pas de Wi-Fi à la maison : CPL

  6. #6
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 25
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Tout flux est une succession de bits groupés par 8.
    je suis en train de communiquer avec une camera qui comprend des trames de sortre:oxaa,ox01,...
    donc par exemple si la trame commence par 0xa c'est une demande de syncronisation.
    c'est pour cela je veus lire hex par hex non car par car.
    (fscanf(pt,"%x",s)).
    peut on acceder directement au bit a l'aide de c?le premier bit d'une chaine par exemple?

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par tun07
    je suis en train de communiquer avec une camera qui comprend des trames de sortre:oxaa,ox01,...
    donc par exemple si la trame commence par 0xa c'est une demande de syncronisation.
    c'est pour cela je veus lire hex par hex non car par car.
    (fscanf(pt,"%x",s)).
    peut on acceder directement au bit a l'aide de c?le premier bit d'une chaine par exemple?
    La caméra envoi des chaines de caractères ?
    "0xaa,0x01"
    ou des données binaires que l'on représente en hexadécimal
    AA 01 etc. ?

    Je suis à peu près sûr, pour des raison évidentes de densité de données et d'efficacité, ce sont des données binaires pures. Dans ce cas, c'est directement la valeur numérique.

    Tu peux donc soit acquérir les bytes un par un comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       int c;
       while ((c = fgetc(fp))!=  EOF)
       {
          /* traitement */
       }
    soit par blocs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       unsigned char trame[TAILLE];
       while (fread(trame, sizeof trame, 1, fp) > 0)
       {
          /* traitement */
       }
    Pas de Wi-Fi à la maison : CPL

  8. #8
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 25
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Je suis à peu près sûr, pour des raison évidentes de densité de données et d'efficacité, ce sont des données binaires pures. Dans ce cas, c'est directement la valeur numérique.
    exactement,des donnees binaires representés en hex,
    mais les solutions que vous avez proposez traitent par caractere ou plus,mais peut on traiter par hex?

  9. #9
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Citation Envoyé par tun07
    exactement,des donnees binaires representés en hex,
    mais les solutions que vous avez proposez traitent par caractere ou plus,mais peut on traiter par hex?
    Il suffit de lire l'octet et de le considérer comme deux digits hexa...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /*On stocke l'octet lu dans value*/
    ...
    lodigit=value&0XF;
    hidigit=((unsigned int) value>>4)&0XF;

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par tun07
    exactement,des donnees binaires representés en hex,
    mais les solutions que vous avez proposez traitent par caractere ou plus,mais peut on traiter par hex?
    Explique "traiter par hex". Pour moi, ça n'a aucun sens. Je crois que tu n'as toujours pas compris que l'hexadécimal, c'est une format de représentation. Les données elles, sont une combinaison de bits, donc du binaire pur.

    Si la caméra envoi une séquence 10101010, fgetc() extrait la valeur binaire 10101010 (représentée 0xAA en hexa ou 0252 en octal ou 170 en décimal si ça t'amuses...). C'est aussi simple que ça. Il n'y a rien à convertir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
       unsigned x = 0xAA;
       printf ("0x%X 0%o %u\n", x, x, x);
     
    0xAA 0252 170
     
    Press ENTER to continue.
    Pas de Wi-Fi à la maison : CPL

  11. #11
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Explique "traiter par hex". Pour moi, ça n'a aucun sens.
    Je suis d'accord. Je pense deviner que cela signifie traiter par groupe de 4 bits.

  12. #12
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 25
    Points : 14
    Points
    14
    Par défaut
    merci
    pour tous

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

Discussions similaires

  1. Conversion hexadécimal en binaire
    Par mokadjo dans le forum Requêtes
    Réponses: 5
    Dernier message: 18/01/2010, 16h08
  2. [A-07]Nombres au format hexadécimal
    Par Lou17 dans le forum Modélisation
    Réponses: 2
    Dernier message: 11/03/2009, 09h53
  3. Recopié un fichier au format U en binaire sous ZOS
    Par Kyle Katarn dans le forum z/OS
    Réponses: 6
    Dernier message: 12/11/2008, 09h49
  4. format de XML binaire
    Par Kurisu dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 02/11/2007, 13h39
  5. Format hexadécimal
    Par cyrilboulan dans le forum Access
    Réponses: 2
    Dernier message: 21/03/2006, 12h45

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