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 :

convertir unsigned short


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2003
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 39
    Par défaut convertir unsigned short
    bonjour a tous,
    voila mon probleme,
    j'ai une fonction prenant 2 parametres, le 1er est un unsigned short * et le 2eme un int.
    Or la variable que je veux faire passé dans la fonction a la place du 1er parametre est un char *.
    L'erreur est bien entendu cannot convert unsigned short to char * ...

    Y a t il une facon de contourné l'erreur ?? peut etre convertir ?

    merci d'avance

  2. #2
    Membre Expert Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Par défaut
    je dirais que c'est un probleme de conception !!
    Pourquoi ta fonction prend un unsigned short * alors que tu veux passer du char * ?

  3. #3
    Membre averti
    Inscrit en
    Janvier 2003
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 39
    Par défaut
    en fait la fonction que j'utilise sert a calculer le checksum d'une entete ip, et je l'ai trouvé sur internet. En cherchant bien un peu partout je me suis apercu que c'etait toujours le meme algo sur tout les sites. Donc j'ai preferé ne pas la changer.
    Ma variable char * est indispensable dans mon programme je ne peux pas m'en passé. Le probleme est maintenant comment faire pour trouvé une entente entre les 2.
    voici ma fonction :

    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
    24
     
     
    unsigned short in_cksum(unsigned short *addr, int len)
    {
    register int sum = 0;
    u_short answer = 0;
    register u_short *w = addr;
    register int nleft = len;
     
    while (nleft > 1)
    {
    sum += *w++;
    nleft -= 2;
    }
    if (nleft == 1)
    {
    *(u_char *) (&answer) = *(u_char *) w;
    sum += answer;
    }
    sum = (sum >> 16) + (sum & 0xffff);
    sum += (sum >> 16);
    answer = ~sum;
    return (answer);
    }
    Si quelqu'un arrive a me changer cette fonction afin qu'elle fonctionne avec du char* et non du unsigned short ca serait vraiment sympa parce que je n'y arrive pas ....

    Merci

  4. #4
    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 jonny
    en fait la fonction que j'utilise sert a calculer le checksum d'une entete ip, et je l'ai trouvé sur internet. En cherchant bien un peu partout je me suis apercu que c'etait toujours le meme algo sur tout les sites. Donc j'ai preferé ne pas la changer.
    Ma variable char * est indispensable dans mon programme je ne peux pas m'en passé. Le probleme est maintenant comment faire pour trouvé une entente entre les 2.
    voici ma fonction :

    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
    24
     
     
    unsigned short in_cksum(unsigned short *addr, int len)
    {
    register int sum = 0;
    u_short answer = 0;
    register u_short *w = addr;
    register int nleft = len;
     
    while (nleft > 1)
    {
    sum += *w++;
    nleft -= 2;
    }
    if (nleft == 1)
    {
    *(u_char *) (&answer) = *(u_char *) w;
    sum += answer;
    }
    sum = (sum >> 16) + (sum & 0xffff);
    sum += (sum >> 16);
    answer = ~sum;
    return (answer);
    }
    Si quelqu'un arrive a me changer cette fonction afin qu'elle fonctionne avec du char* et non du unsigned short ca serait vraiment sympa parce que je n'y arrive pas ....
    C'est un non-sens. car le checksum est calculé sur 16-bits.

    Ce code fonctionne sous conditions (pas portable) :
    • Un char doit faire 8 bits
    • Un short doit faire 16 bits
    • La longueur utile 'len' (en char) de la trame doit être est paire
    • La trame est un tableau de de type unsigned char d'une taille >= 'len'

    Si ces conditions sont réunies, tu peux faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned short cs = in_cksum ((unsigned short *)trame, len);

  5. #5
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Ce code fonctionne sous conditions (pas portable) :
    • Un char doit faire 8 bits
    • Un short doit faire 16 bits
    • La longueur utile 'len' (en char) de la trame doit être est paire
    • La trame est un tableau de de type unsigned char d'une taille >= 'len'

    Si ces conditions sont réunies, tu peux faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned short cs = in_cksum ((unsigned short *)trame, len);
    Hmm, si on accepte toutes tes conditions, ce ne serait pas plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned short cs = in_cksum ((unsigned short *)trame, len/2);
    Jc

  6. #6
    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 fearyourself
    Hmm, si on accepte toutes tes conditions, ce ne serait pas plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned short cs = in_cksum ((unsigned short *)trame, len/2);
    C'est possible... J'ai hésité. En lisant le code, ça m'a paru être len, mais j'ai pu me tromper...

  7. #7
    Membre averti
    Inscrit en
    Janvier 2003
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 39
    Par défaut
    est il possible de convertir un unsigned short en char * ???

Discussions similaires

  1. conversion array <unsigned short> to unsigned short *
    Par kloklo55 dans le forum C++/CLI
    Réponses: 2
    Dernier message: 25/05/2008, 19h48
  2. afficher de unsigned short en hexa?
    Par lykim1982 dans le forum C
    Réponses: 2
    Dernier message: 23/05/2007, 17h51
  3. [MFC] pb de conversion CString en unsigned short
    Par kanabzh29 dans le forum MFC
    Réponses: 5
    Dernier message: 04/05/2006, 10h29
  4. Réponses: 5
    Dernier message: 22/03/2006, 13h25
  5. Unsigned Short
    Par Higestromm dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2006, 17h30

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