kgadhi
Messages postés121Date d'inscriptionmardi 9 août 2005StatutMembreDernière intervention18 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,
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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.
Gendal67
Messages postés627Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention24 juillet 20112 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
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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).
Gendal67
Messages postés627Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention24 juillet 20112 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?
bayeto
Messages postés224Date d'inscriptionmardi 12 août 2003StatutMembreDernière intervention18 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.
Gendal67
Messages postés627Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention24 juillet 20112 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...
bayeto
Messages postés224Date d'inscriptionmardi 12 août 2003StatutMembreDernière intervention18 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.
Gendal67
Messages postés627Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention24 juillet 20112 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...
Gendal67
Messages postés627Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention24 juillet 20112 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