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 :

Transfert d'un tableau à un autre


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut Transfert d'un tableau à un autre
    Bonjour à tous,

    admettons j'ai ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int floatLength = 4;
    float[] = {4.1, 4.2, 4.3, 4.3};
    Je veux avoir ces données sous forme de byte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    byte* floatData = new byte[floatLength * sizeof(float)];
    Comment je peux faire pour transférer les données du tableau de float au tableau de byte?

    J'ai essaye avec memcpy ça fonctionne pas, ça met une erreur d'accès en lecture, et j'sais pas comment m'y prendre avec std::copy...

    Pouvez-vous m'aiguiller svp?

    Merci

    A bientôt

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Salut !

    Je ne sais pas si j'ai bien compris ta question.
    Tu veux recopier le contenu du tableau, octet par octet (et non pas indice par indice), dans un autre tableau de type byte ?
    Dans ce cas, tu peux faire 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
     
    #define floatLength 4
    typedef unsigned char byte;
    int a;
    float tableau[floatLength] = {4.1, 4.2, 4.3, 4.3};
    int main()
    {
        byte* floatData = new byte[floatLength * sizeof(float)];
        if (floatData==NULL) return 1;
        for (a=0; a<floatLength*sizeof(float); a++) floatData[a]=((byte*)tableau)[a];
     
    // reste du programme
    // ...
     
        delete [] floatData;
        return 1;
    }

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 258
    Par défaut
    Comme je le disais dans ton autre thread http://www.developpez.net/forums/sho...d.php?t=199227,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <algorithm>
     
    int main()
    {
    	typedef unsigned char byte;
     
    	unsigned int const tailleTableau = 4;
    	float monTableau[tailleTableau] = { 4.1f, 4.2f, 4.3f, 4.4f };
    	byte* byteTab = new byte[tailleTableau*sizeof(float)];
     
    	std::copy(reinterpret_cast<byte*>(monTableau), reinterpret_cast<byte*>(monTableau+tailleTableau), byteTab);
    }

  4. #4
    mat.M
    Invité(e)
    Par défaut
    Ne pas se casser la tête; prendre std::vector
    std::vector<float> v_float;
    std::vector<byte> v_byte;
    v_float.push_back(4.5);
    ..
    float val=v_float[0];
    C'est tellement si simple
    Prendre garde à ce qu'un tableau soit de la même taille que l'autre

    Sinon la méthode de Roulious plus élaborée que la mienne

  5. #5
    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 mat.M
    Ne pas se casser la tête; prendre std::vector

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    std::vector<float> v_float;
    std::vector<byte> v_byte;
    v_float.push_back(4.5);
    ..
    float val=v_float[0];
    C'est tellement si simple
    Prendre garde à ce qu'un tableau soit de la même taille que l'autre

    Sinon la méthode de Roulious plus élaborée que la mienne
    où est la solution là-dedans ??


    Sinon la solution la + simple est souvent la meilleure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    byte* tableau_byte = new byte[floatLength * sizeof(float)];
    memcpy (tableau_byte, tableau_float, floatLength * sizeof(float));

  6. #6
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Que veux-tu exactement ?
    - une vue byte sur ton buffer de flottants ? Vue que tu vas utiliser aussitôt sans chercher à la mémoriser
    => un simple reinterpret_cast suffit
    - une copie de la vue byte sur ton buffer.
    => tu crées ton nouveau buffer après réinterpretation
    - une séquence d'octets correctement sérialisés en vue d'échanges portables disque/réseau
    => Là il faut encore faire d'autres traitements. Autant oublier le code qui suit, il est sans intérêt.

    À supposer que tu partes d'un tf (tableau statique, dynamique, ou vecteur de floattants -- peu importe, cela ne changera rien), de nf éléments.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // on délimite début et fin de la séquence en mémoire
    unsigned char const * const view_begin = reinterpret_cast<unsigned char const*>(&tf[0]);
    unsigned char const * const view_end   = reinterpret_cast<unsigned char const*>(&tf[0]+nf);
     
    // on crée un buffer copie de la vue ; si nécessaire
    const std::vector<unsigned char> bbuffer(view_begin, view_end);
    Code qui ne fuira pas. Même s'il y a des exceptions qui se balladent.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  7. #7
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par rigobert
    où est la solution là-dedans ??

    ?
    On nous parle de transférer des données d'un tableau à un autre...
    La question poser est un peu floue

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

Discussions similaires

  1. [XL-2010] Transfert d'une valeur d'un tableau à l'autre avec conditions
    Par gilou41 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/06/2014, 10h49
  2. transfert d'un tableau d'une activité à une autre
    Par Arwa89 dans le forum Android
    Réponses: 2
    Dernier message: 12/04/2013, 13h15
  3. transfert d'un tableau d'un form vers un autre
    Par ghost73 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 04/02/2007, 17h33
  4. affecter un tableau à un autre
    Par pascaldengis dans le forum C
    Réponses: 2
    Dernier message: 23/11/2005, 17h54
  5. []assigner 1 tableau à 1 autre tableau
    Par User dans le forum Général VBA
    Réponses: 13
    Dernier message: 09/11/2005, 14h06

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