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 :

programmation du langage c


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Avril 2009
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 1
    Par défaut programmation du langage c
    Bonjour,
    Voila, j'ai un message a lire.
    Il commence par "54" et est suivi par 2 octets en hexa qui sont "1a" et "01".
    le "1a" est l'octet de poids faible et le "01" est celui de poids fort.
    je lis ce message avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fread(&s,sizeof(unsigned char),1,source)
    et je veux recopier la valeur de "s" du type "int" dans 2 variables
    de la sorte tout dans une fonction main():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    s1=(char *)s;
    s2=(char *)s;
    strcat(s3,s2);
    strcat(s3,s1);
    res=strtol(s3,NULL,16);
    printf("%u",res);
    je veux les convertir en décimal et l'utiliser pour compter les octets du message. il n'y a pas d'erreur et j'ai res=0??
    de même,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char c1;
    long nb;
    fread(&s,sizeof(unsigned char),1,source);
    c1=(char *)s;
    nb=strtol((char *)c1,NULL,16);
    // pareil nb=0 ??
    pourriez vous rapidement m'eclairer svp.
    merci d'avance!!

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Tu ferais mieux de poster l'intégralité de ton code pour qu'on comprenne bien ton problème.

  3. #3
    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 nagach9 Voir le message
    Il commence par "54" et est suivi par 2 octets en hexa qui sont "1a" et "01".
    le "1a" est l'octet de poids faible et le "01" est celui de poids fort.
    je lis ce message avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fread(&s,sizeof(unsigned char),1,source)
    et je veux recopier la valeur de "s" du type "int" dans 2 variables
    de la sorte tout dans une fonction main():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    s1=(char *)s;
    s2=(char *)s;
    strcat(s3,s2);
    strcat(s3,s1);
    res=strtol(s3,NULL,16);
    printf("%u",res);
    je veux les convertir en décimal et l'utiliser pour compter les octets du message. il n'y a pas d'erreur et j'ai res=0??
    de même,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char c1;
    long nb;
    fread(&s,sizeof(unsigned char),1,source);
    c1=(char *)s;
    nb=strtol((char *)c1,NULL,16);
    // pareil nb=0 ??
    pourriez vous rapidement m'eclairer svp.
    merci d'avance!!
    Utilisation de pointeurs non initialisés, de chaines invalides... Il faut commencer par apprendre les bases du langage C...

    Si le message est une séquence de 3 octets (en hexa) :

    54 1A 01

    tels que

    [0] est un code non défini
    [1] est le LSB d'un entier de 16-bit
    [2] est le MSB d'un entier de 16-bit

    (ce codage est contraire aux usages qui veut que ce soit le MSB qui soit transmis en premier... Peut importe, du moment que c'est spécifié correctement).

    Ensuite, tu utilises une fonction de lecture de 1 caractère. Admettons :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    unsigned char s;
    fread (&s,sizeof s, 1, source);
    Pour récupérer les 3 octets, tu peux faire comme ceci :

    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
     
    unsigned char s;
    unsigned int val = 0;
     
    /* le premier octet est lu mais non traité. */
    fread (&s,sizeof s, 1, source);
     
    /* lecture et stockage du LSB */
    fread (&s,sizeof s, 1, source);
    val |= s << (8 * 0);
     
    /* lecture et stockage du MSB */
    fread (&s,sizeof s, 1, source);
    val |= s << (8 * 1);
     
    /* dans val, il y a la valeur de l'octet */
    printf ("val = %u\n", val);
    Détails ici : http://emmanuel-delahaye.developpez....urs-bit-bit-c/

Discussions similaires

  1. probleme sur un programme en langage c
    Par haddad dans le forum Débuter
    Réponses: 24
    Dernier message: 17/12/2007, 08h36
  2. programmation delphi langage pascal:lien de parenté
    Par christt6789 dans le forum Delphi
    Réponses: 2
    Dernier message: 23/05/2007, 15h48
  3. Réponses: 13
    Dernier message: 02/01/2006, 11h08
  4. programme en langage c
    Par nivine dans le forum C
    Réponses: 18
    Dernier message: 08/10/2005, 10h34
  5. Programme en langage c et asm pour PowerPC
    Par punkybreizh dans le forum Autres architectures
    Réponses: 4
    Dernier message: 07/04/2005, 13h58

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