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

Réseau C Discussion :

Convertir int en chaîne de caractère


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de be_tnt
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Par défaut Convertir int en chaîne de caractère
    Voilà, j'écris dans un buffer un élément de type int. J'utilise pour cela strcat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcat(buffer,strlen(adminNameIn)+ATTRIBUTE_HEADER_SIZE);
    La partie "strlen(adminNameIn)+ATTRIBUTE_HEADER_SIZE" doit être converti en chaîne de caractère. Si j'utilise (char), je risque de perdre de l'info. Est-ce que (char *) est possible et correct?

    Je sais que ce calcul n'exédera pas 33 characters.

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut Re: Convertir int en chaîne de caractère
    Citation Envoyé par be_tnt
    Voilà, j'écris dans un buffer un élément de type int. J'utilise pour cela strcat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcat(buffer,strlen(adminNameIn)+ATTRIBUTE_HEADER_SIZE);
    La partie "strlen(adminNameIn)+ATTRIBUTE_HEADER_SIZE" doit être converti en chaîne de caractère. Si j'utilise (char), je risque de perdre de l'info. Est-ce que (char *) est possible et correct?

    Je sais que ce calcul n'exédera pas 33 characters.
    Ca marche ton truc la !!!???

    Essaye ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sprintf(buffer, "%d", monentier);
    La réponse etait dans la

  3. #3
    Membre éclairé Avatar de be_tnt
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Par défaut
    En fait le buffer sera utilisé pour envoyer des infos via un socket.
    Si j'utilises sprintf, je suppose que je peux mettre mes infos les unes à la suite des autres. Du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     sprintf(buffer,"%d%d%s",type,taille,valeur);

  4. #4
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par be_tnt
    En fait le buffer sera utilisé pour envoyer des infos via un socket.
    Si j'utilises sprintf, je suppose que je peux mettre mes infos les unes à la suite des autres. Du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     sprintf(buffer,"%d%d%s",type,taille,valeur);
    Oui et tu peux meme mettre des espaces comme ca de l'autre cote c'est facile pour faire un sscanf

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sscanf(buffer, "%d %d %s", &type, &taille, valeur);

  5. #5
    Membre éclairé Avatar de be_tnt
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Par défaut
    de l'autre côté, c'est du java. Donc pas de sscanf.

  6. #6
    Membre éclairé Avatar de be_tnt
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Par défaut
    que pensez vous de:
    avec type = int et buffer = char *??

  7. #7
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par be_tnt
    que pensez vous de:
    avec type = int et buffer = char *??
    itoa n'est pas standard.

  8. #8
    Membre éclairé Avatar de be_tnt
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Par défaut
    Alors ça marche bien avec sprintf sauf que je voudrais être sûre que: type soit sur 1 byte, taille 2 bytes. Comment est-ce que je peux faire ça?

  9. #9
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par be_tnt
    Alors ça marche bien avec sprintf sauf que je voudrais être sûre que: type soit sur 1 byte, taille 2 bytes. Comment est-ce que je peux faire ça?
    A toi de choisir tes types selon la taille que tu veux qu'ils aient.

    Arcitecture standard

    char = 1 octet
    short = 2 octets
    int = 4 octets
    char tab[10] = 10 octets
    ...

  10. #10
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par défaut
    Citation Envoyé par Skyrunner
    A toi de choisir tes types selon la taille que tu veux qu'ils aient.

    Arcitecture standard

    char = 1 octet
    short = 2 octets
    int = 4 octets
    char tab[10] = 10 octets
    ...
    hmm, terrain glissant.
    la taille des entiers int est très variable (2, 4, 8 octets) d'un système à l'autre...

  11. #11
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par rigobert
    hmm, terrain glissant.
    la taille des entiers int est très variable (2, 4, 8 octets) d'un système à l'autre...
    D'ou ma phrase : Architecture Standard, mais on peut se demander qu'est ce qu'une architecture standard ???

  12. #12
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par défaut
    Citation Envoyé par Skyrunner
    D'ou ma phrase : Architecture Standard, mais on peut se demander qu'est ce qu'une architecture standard ???
    Tout à fait d'accord cette fois-ci.

    De plus, lorsqu'on développe par exemple sous API Win32 avec un SDK à jour, on est régulièrement confronté à la problématique 32/64 bits (la chose ayant été, il faut bien le dire, un peu bricolée par M$) pour les pointeurs et les entiers, et certains casts peuvent se révéler mortels si on n'y fait pas attention...

  13. #13
    Membre éclairé Avatar de be_tnt
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Par défaut
    Ici je n'ai pas de pb avec win32 puisque le dévelopement est sur système Unix. Maintenant y'a pas qqn qui ait une idée? Même une toute petite

  14. #14
    Membre éclairé Avatar de be_tnt
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Par défaut
    Bon ça a pas l'air de vouloir fonctionner. Voilà ce que j'ai fait:

    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
     
    #define ATTRIBUTE_HEADER_SIZE 3
     
    /*
     * Attribute type definition
    */
    #define USERNAME_ATTR '0'
    #define USERPWD_ATTR '1'
    #define USERIP_ATTR '2'
     
    int packetSize = strlen(adminNameIn) + strlen(adminPassword)+ strlen(hostAddress) + ATTRIBUTE_HEADER_SIZE*3;
       sprintf(buffer,"%c%hd%s%c%hd%s%c%hd%s",
               USERNAME_ATTR,
               strlen(adminNameIn)+ATTRIBUTE_HEADER_SIZE,
               adminNameIn,
               USERPWD_ATTR,
               strlen(adminPassword)+ATTRIBUTE_HEADER_SIZE,
               adminPassword,
               USERIP_ATTR,
               strlen(hostAddress)+ATTRIBUTE_HEADER_SIZE,
               hostAddress);
    La taille du buffer et packetSize diffère de 2.

  15. #15
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    A vue de nez sans lire tout, je dirai qu'il te manque les 2 \0 de tes 2 chaines de caracteres.

    Si ta chaine vaut "bonjour" strlen te donnera 7, bien qu'elle fasse 8 octets
    'b', 'o', 'n', 'j', 'o', 'u', 'r', '\0'

  16. #16
    Membre éclairé Avatar de be_tnt
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Par défaut
    Donc si je te suis, le sprintf garde le '\0'.

  17. #17
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : Octobre 2005
    Messages : 141
    Par défaut
    Citation Envoyé par be_tnt
    Donc si je te suis, le sprintf garde le '\0'.
    Oui

  18. #18
    Membre éclairé Avatar de be_tnt
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Par défaut
    ben ça marche toujours pas. Mon serveur en Java ne décrypte pas correctement. A mon avis, j'ai un petit problème niveau formattage des données.

  19. #19
    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 be_tnt
    ben ça marche toujours pas. Mon serveur en Java ne décrypte pas correctement. A mon avis, j'ai un petit problème niveau formattage des données.
    Ben oui...

    Explique quel format de données tu veux (texte, binaire, séparateurs...)
    .

  20. #20
    Membre éclairé Avatar de be_tnt
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Par défaut
    oki alors voilà le serveur java s'attend à récupérer :
    sur 1 byte: le type de donnée -> un integer
    sur 2 bytes: la longueur de l'ensemble type + length + value -> un short
    sur x bytes: une chaîne de caractère

    Pour le moment même le premier byte n'est pas reconnu correctement

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 9
    Dernier message: 17/02/2007, 17h43
  2. Réponses: 4
    Dernier message: 22/12/2006, 15h10
  3. Convertir une chaîne de caractères
    Par PedroBD dans le forum Langage
    Réponses: 3
    Dernier message: 13/11/2006, 17h25
  4. Réponses: 3
    Dernier message: 09/05/2006, 14h35

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