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 :

Données binaires vers structure contenant des tableaux


Sujet :

C#

  1. #1
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 90
    Points : 72
    Points
    72
    Par défaut Données binaires vers structure contenant des tableaux
    Bonjour,

    Je me retrouve face un problème qui se mort la queue quand j'essaye de trouver la solution.

    J'ai un structure contenant un tableau de structure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public struct Header_t{
            public UInt16 usSignature;
            public UInt16 usVersion;}
    
    public struct Definition_Struct{
            public UInt16 Var1;
            public static Header_t[] tab_header1 = new Header_t[13];
            public UInt16 Var2;
            public static Header_t[] tab_header2 = new Header_t[4];}
    
    Definition_Struct MaStruct;
    Depuis un fichier binaire contenant les valeurs de la struture, je les convertis en tableau de bytes: (binaire --> ArrayBytes)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    FileStream monFlux = new FileStream("fichierbinaire.bin", FileMode.OpenOrCreate);
    BinaryReader Reader = new BinaryReader(monFlux);
    
    Byte[] value = new Byte[monFlux.Length];
    value = Reader.ReadBytes(value.Length);
    Ayant mes données en brutes dans le tableau value, je les injecte dans ma structure en utilisant la méthode Marshall.PtrToStructure
    : (ArrayBytes --> MaStruct)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    GCHandle handle = GCHandle.Alloc(value, GCHandleType.Pinned);
    MaStruct = (T)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(Definition_Struct));
    handle.Free();
    Cela fonctionne qu'à moitié, car seuls les variables non statiques sont remplies et les tableaux ne sont pas assignés.
    Cela vient du fait qu'ils soient en static, mais s'ils ne le sont pas, impossible de compiler.

    Après voir essayer diverses possibilités (class au lieu de structure) je me retrouve bloquer.

    Auriez vous idée de là où le bât blesse ??

    Merci

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Je dis peut être une énorme bourde, n'étant pas familier avec Marshal.PtrToStructure.
    Mais PtrToStructure ne va t'il pas de lui même remplir tes Header[].

    Et dans ce cas, ceci suffirait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public struct Header_t{
            public UInt16 usSignature;
            public UInt16 usVersion;}
     
        public struct Definition_Struct{
            public UInt16 Var1;
            public Header_t[] tab_header1;
            public UInt16 Var2;
            public Header_t[] tab_header2;}

  3. #3
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 90
    Points : 72
    Points
    72
    Par défaut
    Dans la mesure où ils sont en static dans ma structure, ils ne le sont pas justement. S'ils ne sont pas en static, impossible de compiler.

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    J'ai du mal à comprendre ta réponse.

    Cela signifie que PtrToStructure n'appelle pas tout seul les constructeur de tes tableaux de Header ?

    Tu as besoin de les déclarer static car tu cherches a appeler toi même les constructeurs de tes tableaux au lieu de laisser PtrToStructure le faire tout seul.

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/10/2018, 15h30
  2. Réponses: 3
    Dernier message: 06/05/2011, 11h39
  3. [iText] Tableau contenant des tableaux
    Par drizztoli dans le forum Documents
    Réponses: 2
    Dernier message: 01/09/2010, 21h51
  4. Réponses: 1
    Dernier message: 22/01/2009, 23h33
  5. [Hash] table de hachage contenant des tableaux
    Par GLDavid dans le forum Langage
    Réponses: 4
    Dernier message: 19/01/2007, 17h03

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