Probleme avec une variable de type DWORD

kgadhi Messages postés 121 Date d'inscription mardi 9 août 2005 Statut Membre Dernière intervention 18 décembre 2007 - 9 févr. 2006 à 18:23
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 - 13 févr. 2006 à 11:33
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

Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
9 févr. 2006 à 18:30
fwrite(&tmp, sizeof(DWORD), 1, file)
0
kgadhi Messages postés 121 Date d'inscription mardi 9 août 2005 Statut Membre Dernière intervention 18 décembre 2007
9 févr. 2006 à 18:36
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,
0
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
9 févr. 2006 à 18:41
Essaie de le mettre dans un buffer.
Pour un simple entier ==> wsprintf(szBuf, "%d", dw); // dw est int
0
kgadhi Messages postés 121 Date d'inscription mardi 9 août 2005 Statut Membre Dernière intervention 18 décembre 2007
9 févr. 2006 à 18:45
excuses moi gendal67 mais est ce que tu peux expliquer un peu plus, Comment je peux la mettre dans un buffer ?
merci d'avance.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 févr. 2006 à 18:56
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++
0
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011
9 févr. 2006 à 18:57
tu converti ta dword en const char =

ultoa bnultoa
0
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
9 févr. 2006 à 20:18
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
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 févr. 2006 à 20:26
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++
0
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
9 févr. 2006 à 21:31
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...
0
bayeto Messages postés 224 Date d'inscription mardi 12 août 2003 Statut Membre Dernière intervention 18 octobre 2010
10 févr. 2006 à 16:42
Ecrire dans un fichier texte avec fwrite? non fprintf me semble meux adapté.
0
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
10 févr. 2006 à 21:42
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
0
bayeto Messages postés 224 Date d'inscription mardi 12 août 2003 Statut Membre Dernière intervention 18 octobre 2010
10 févr. 2006 à 23:18
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.
0
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
10 févr. 2006 à 23:54
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
0
bayeto Messages postés 224 Date d'inscription mardi 12 août 2003 Statut Membre Dernière intervention 18 octobre 2010
11 févr. 2006 à 11:28
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.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 févr. 2006 à 11:37
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++
0
kgadhi Messages postés 121 Date d'inscription mardi 9 août 2005 Statut Membre Dernière intervention 18 décembre 2007
13 févr. 2006 à 10:34
merci à bayeto pour ta reponse et merci aux autres aussi
0
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
13 févr. 2006 à 11:18
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
0
kgadhi Messages postés 121 Date d'inscription mardi 9 août 2005 Statut Membre Dernière intervention 18 décembre 2007
13 févr. 2006 à 11:22
excuses moi Gendal67 mais j'ai essayé ta reponse mais j'ai pas obtenu le resultat que je voulait.
Mais merci comme meme.
0
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
13 févr. 2006 à 11:33
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
0
Rejoignez-nous