Probleme avec une variable de type DWORD

Signaler
Messages postés
121
Date d'inscription
mardi 9 août 2005
Statut
Membre
Dernière intervention
18 décembre 2007
-
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011
-
Bonjour tout le monde,

J'aimerais savoir comment on fait pour ecrire une variable de type DWORD dans un fichier,

DWORD tmp = 0;
....
FILE *file = NULL;if ((file fopen("Ident_PC.txt", "a")) NULL)
return 0;
else
fputs(tmp, file);

mais la compilation me mets le message d'erreur:
invalid conversion from 'DWORD' to 'const char'

Merci pour votre aide

19 réponses

Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011
2
fwrite(&tmp, sizeof(DWORD), 1, file)
Messages postés
121
Date d'inscription
mardi 9 août 2005
Statut
Membre
Dernière intervention
18 décembre 2007

Merci GEndal67 de ta reponse, mais ça ne marche pas
J'ai plus le message d'erreur
mais je souhaite récupérer le contenu de la variable tmp pas son adresse,
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011
2
Essaie de le mettre dans un buffer.
Pour un simple entier ==> wsprintf(szBuf, "%d", dw); // dw est int
Messages postés
121
Date d'inscription
mardi 9 août 2005
Statut
Membre
Dernière intervention
18 décembre 2007

excuses moi gendal67 mais est ce que tu peux expliquer un peu plus, Comment je peux la mettre dans un buffer ?
merci d'avance.
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Faut toujours préciser si tu veux enregistre le DWORD ou alors sa représentation ascii en chaine.
Direct le DWORD en binaire sera nettelment + rapide car aucune conversion.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
755
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
30 janvier 2011

tu converti ta dword en const char =

ultoa bnultoa
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011
2
BruNews, tu utiliserais quelle fonction toi pour écrire son DWORD dans le fichier? Tu peux écrire 2-3 lignes de code stp? Parce que le fait que fwrite() enregistre l'adresse et non la valeur, ça me perturbe un chouia....je commence à me poser des questions :x
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Mais ça n'enregistre pas l'adresse, on donne seulement l'adresse où sont les données et la taille des données à prendre partant de cette adresse, ce qui va écrire le DWORD direct en binaire (ses 4 octets).

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011
2
Donc j'avais bien raison d'utiliser fwrite() et la syntaxe que j'avais mise était bien? Tant mieux, ça me rassure...je commençais à m'inquiéter...
Messages postés
224
Date d'inscription
mardi 12 août 2003
Statut
Membre
Dernière intervention
18 octobre 2010

Ecrire dans un fichier texte avec fwrite? non fprintf me semble meux adapté.
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011
2
bayeto> En utilisant fprintf, tu dois écrire un buffer (char*), donc tu inscrit la représentation acii de ton DWORD dans le buffer; c'est beaucoup plus lent que fwrite()...un code qui marche n'est pas forcément le meilleur...là c'est optimisé car aucune conversion, directe la vleur binaire du DWORD qui est écrite...comme le disais BruNews....je ne sais pas si tu as lu plus haut...

PS : simple curiosité...personnellement je ne connais pas le "tag" (genre %d pour les int, etc) pour écrire un DWORD (32bits) dans un buffer, tu en connais un toi?

Bonne soirée
Messages postés
224
Date d'inscription
mardi 12 août 2003
Statut
Membre
Dernière intervention
18 octobre 2010

En tout cas en regardant le bout de code donné, remplacer fput(tmp,file); par fprintf(file,"%u\n",tmp); semble plus adapté au problème.
Pour les 'tags' suffit de regarder la doc de printf et consorts.
Enfin fwrite c'est plus pour du binaire et je vois pas l'intêret d'écrire les 4 octets du DWORD dans un fichier texte (qui semble être le cas ici). Surement que fprintf est plus lente mais au moins le résultat sera lisible en ouvrant le notepad.
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011
2
bayeto> C'est pour ça que BruNews à demander à ce que kgahdi précise de quoi il s'agit : soit la valeur (binaire) du DWORD soit sa repérensation ASCII.


Merci du conseil pour printf...lol...mais le type DWORD est un type 'construit' et à ma connaissance aucun 'tag' de printf permet de mettre un DWORD dans un buffer. Ton %u ne marchera que si le DWORD a une valeur inférieure à 65535...si c'est supérieur, la valeur inscrite dans le fichier sera erronnée...fprintf marchant sur le même principe des 'tag' que printf...je vois mal comment tu pourrais faire

Pour la rapidité de fwrite(), c'est de l'optimisation.
Libre à chacun de vouloir programmer le plus proprement possible ou pas...

Sur ce, bonne soirée à tout le monde
Messages postés
224
Date d'inscription
mardi 12 août 2003
Statut
Membre
Dernière intervention
18 octobre 2010

gendal67> Je vois pas vraiment où est le problème avec le %u, au pire (sur un compilo 16 bits par ex) on fait %lu.
Montre-moi un contre-exemple praceque la je sèche.
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Le couple ultoa() + fwrite() ne serait pas plus rapide qu'un fprintf() ???
En toute logique ça devrait mais c'est à vérifier.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
121
Date d'inscription
mardi 9 août 2005
Statut
Membre
Dernière intervention
18 décembre 2007

merci à bayeto pour ta reponse et merci aux autres aussi
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011
2
J'en déduis que tu va utiliser la méthode de bayeto lol.
15 posts pour un problême aussi simple...avec la réponse optimisée directement dans le premier post....
ça me fait sourire tout ça...

Content d'avoir pu t'aider
Messages postés
121
Date d'inscription
mardi 9 août 2005
Statut
Membre
Dernière intervention
18 décembre 2007

excuses moi Gendal67 mais j'ai essayé ta reponse mais j'ai pas obtenu le resultat que je voulait.
Mais merci comme meme.
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011
2
kgadhi> donc tu voulais que ça soit ouvrable avec le bloc-notes? Désolé, fallait préciser...fpritnf() est une très bonne méthode pour ça...mais bon on est pas devin sur l'exactitude de ce que tu voulais.

Je viens de vérifier la nature exacte du type DWORD...c'est un unsigned long int....donc sur ce point, bayeto a raison, la conversion dans le buffer marche quelle que soit le DWORD...et le %u ou %lu dépend du fait que ce soit 16 ou 32bits selon le compilo...je conseillerais %lu pour être certain

Bonne journée à tous