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 :

Copier un long dans un tableau de char?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 40
    Par défaut Copier un long dans un tableau de char?
    Ben voilà, un problème qui me parait simple mais j'y arrive pas et je vois pas quelle fonction utiliser.
    Je voudrais copier le contenu d'une variable de type long dans un tableau de caractères...
    J'ai donc ça:

    char message[60];
    long monLong;

    Et donc je veux mettre mon long dans les 4 premiers octets de mon tableau, comment faire?
    J'ai bien essayé avec un memset mais ça me copie 4 fois le même octet au lieu de me copier le tout comme y faut.

    Merci d'avance...

  2. #2
    Membre chevronné
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Par défaut
    Citation Envoyé par the_ionic
    Ben voilà, un problème qui me parait simple mais j'y arrive pas et je vois pas quelle fonction utiliser.
    Je voudrais copier le contenu d'une variable de type long dans un tableau de caractères...
    J'ai donc ça:

    char message[60];
    long monLong;

    Et donc je veux mettre mon long dans les 4 premiers octets de mon tableau, comment faire?
    J'ai bien essayé avec un memset mais ça me copie 4 fois le même octet au lieu de me copier le tout comme y faut.

    Merci d'avance...
    memcpy(message, &monLong, sizeof(monLong);

  3. #3
    Membre éprouvé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Par défaut
    et sprintf aussi, penser aux SVP : http://c.developpez.com/faq/c/?page=...RINGS_strtonum

  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 doudouallemand
    Le Monsieur n'a pas parlé de format texte... (Mais c'est vrai que ce n'est pas très clair...)

  5. #5
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 40
    Par défaut
    Bon pour être plus clair, je fais un truc qui doit envoyer des trames réseaux d'une carte embarquée vers une machine Linux.
    J'ai donc un tableau qui représente mon message (je gère les en-têtes ailleurs).
    Dans mon message, je souhaite pouvoir mettre plusieurs choses dont par exemple un long, puis un autre, puis un autre etc...
    Donc là, dans mon exemple, mon long est une stat que je vais lire à l'aide des drivers de la carte, et je veux simplement la mettre dans le tableau message avant de la rebalancer par le réseau à ma machine Linux.
    Est ce plus clair comme cela??? J'espère! :-)

  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 the_ionic
    Dans mon message, je souhaite pouvoir mettre plusieurs choses dont par exemple un long, puis un autre, puis un autre etc...
    Donc là, dans mon exemple, mon long est une stat que je vais lire à l'aide des drivers de la carte, et je veux simplement la mettre dans le tableau message avant de la rebalancer par le réseau à ma machine Linux.
    Si le format réseau est bien 'MSB en tête' (c'est la norme), ma solution est donc la bonne...

    Tu as bien noté que le tableau devait être de type unsigned char, et l'entier de type unsigned long.

  7. #7
    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 Foobar1329
    memcpy(message, &monLong, sizeof(monLong);
    Pas portable. La représentation interne n'est pas forcément celle exigée dans le tableau de [unsigned ]char.

  8. #8
    Membre chevronné
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Pas portable. La représentation interne n'est pas forcément celle exigée dans le tableau de [unsigned ]char.
    Ha ben il avait précisé le monsieur

    Dans ce case, mieux vaut aussi travailler avec unsigned long.

    A+

  9. #9
    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 Foobar1329
    Dans ce case, mieux vaut aussi travailler avec unsigned long.
    Exact, je mets à jour...

  10. #10
    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 the_ionic
    Ben voilà, un problème qui me parait simple mais j'y arrive pas et je vois pas quelle fonction utiliser.
    Je voudrais copier le contenu d'une variable de type long dans un tableau de caractères...
    J'ai donc ça:

    char message[60];
    long monLong;

    Et donc je veux mettre mon long dans les 4 premiers octets de mon tableau, comment faire?
    J'ai bien essayé avec un memset mais ça me copie 4 fois le même octet au lieu de me copier le tout comme y faut.
    Selon quels critère (endianess requise ?)

    Si c'est pour un format 'réseau', c'est MSB en tête alors :
    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
     
    #include <stdio.h>
    int main (void)
    {
       unsigned char message[60];
       unsigned long monLong = 0xDEADBEEF;
     
       message[0] = (monLong >> (8 * 3)) & 0xFF;
       message[1] = (monLong >> (8 * 2)) & 0xFF;
       message[2] = (monLong >> (8 * 1)) & 0xFF;
       message[3] = (monLong >> (8 * 0)) & 0xFF;
     
       {
          int i;
          for (i = 0; i < 4; i++)
          {
             printf ("%02X ", message[i]);
          }
          printf ("\n");
       }
       return 0;
    }

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

Discussions similaires

  1. Entrer une grille dans un tableau de char
    Par killersky4 dans le forum Débuter
    Réponses: 3
    Dernier message: 05/01/2009, 16h41
  2. Réponses: 11
    Dernier message: 14/07/2007, 18h44
  3. Intégrer une vaiable float dans un tableau de char
    Par NoritakaRomain dans le forum C
    Réponses: 2
    Dernier message: 14/05/2007, 15h19
  4. retrouver unesuite de caractères dans un tableau de char
    Par petitours dans le forum C++Builder
    Réponses: 17
    Dernier message: 12/07/2005, 23h43
  5. Réponses: 4
    Dernier message: 10/10/2003, 18h04

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