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 :

[structure, fichier et buffer] un truc plus simple


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut [structure, fichier et buffer] un truc plus simple
    salut,


    mon but :
    ecrire des instances de structure dans un fichier binaire.

    actuellement je fais ainsi:
    • reservation d' un tableau char,
    • memcpy de l'instance de la structure dans tableau
    • ecriture du tableau dans un ofstream (avec methode write()).


    existe il un type de donnée ou une methode plus approprié a mon traitement ?

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ce que tu fais là, ce sont des conversions brutes telles que :
    TaStructure* --> void* --> char*

    Faire TaStructure* --> char* sera équivalent et bien plus simple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TaStructure obj;
    f.write(reinterpret_cast<char*>(&obj), sizeof(obj));
    Bien entendu ce que tu fais suppose que ta structure est un type POD.

  3. #3
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut conversion impossible ???
    Cependant, j ai un problème de casting lors de la conversion du premier element de chaque paire existante dans un std::map

    tentative :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    l_FileOut.write(reinterpret_cast<char*>(&l_itClic->first),
    sizeof(l_itClic->first));
    Le premier elèment de la pair est un T_CLIC :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef unsigned int	T_CLIC;
    j'utilise un iterateur sur ma map qui est de ce type
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef std::map<T_CLIC,UnAutreTypeAMoi> MapClics;
    et l'erreur est la suivante :
    XXX.cpp(586): error C2440: 'reinterpret_cast'*: impossible de convertir de 'const T_CLIC *__w64 ' en 'char *'
    La conversion perd les qualificateurs

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Désolé, j'ai été un peu trop vite. Il faut convertir en const char* et non en char*.

  5. #5
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut
    oui mais seuleument dans ce cas !

    pour tout le reste ca marche...
    je comprend pas pourquoi d'ailleurs...

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Parce que ton itérateur de map pointe vers un pair<const int, truc> (parce que la clé ne peut être modifiée après insertion). Donc tu ne peux prendre son adresse (et la convertir) que sous forme d'un pointeur const.

    De toute façon write prend un const char* (il n'accède qu'en lecture à la mémoire), c'est donc une bonne idée de lui en passer un directement.

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

Discussions similaires

  1. Supprimer un répertoire et les fichiers qu'il contient mais en plus simple
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 09/08/2019, 09h40
  2. [MySQL] Quel format de fichier est le plus simple à importer vers MySQL ?
    Par xenos dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 11/08/2007, 23h59
  3. Format date : y'a forcément plus simple...
    Par ZERS dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/12/2004, 15h28
  4. structure fichier .URL
    Par hiko-seijuro dans le forum Windows
    Réponses: 2
    Dernier message: 02/11/2004, 22h37
  5. [Débutant][Win32] : Lecture ds un fichier ac buffer
    Par silver_dragoon dans le forum Windows
    Réponses: 3
    Dernier message: 24/03/2004, 19h34

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