View Full Version : [c++]fwrite, perke scrive in binario e non in ascii ?
come da titolo, faccio un semplice fwrite:
FILE *fp ;
int x = 100 ;
fp = fopen ( "output.txt" , "w" ) ;
fwrite ( &x , sizeof ( int ) , 1 , fp ) ;
fclose ( fp ) ;
funziona perfettamente, solo un problema, nel file scrive in binario e non in ascii , perke ? :(
ilsensine
06-09-2005, 13:42
Non scrive né binario né ascii, scrive semplicemente il numero di byte che specifichi.
Non ha una sfera di cristallo per sapere che stai scrivendo un "int" invece che - ad es. - un "float" ;)
capito. Come faccio a scrivere un file in ascii ? :D
ilsensine
06-09-2005, 15:00
Qualcosa tipo:
char buf[16];
sprintf(buf, "%d", x);
fwrite(buf, strlen(buf), 1, fp);
In c++ credo che puoi usare gli stream per semplificarti il lavoro ed evitare buffer temporanei. Esistono anche simili soluzioni in c (ad es. la dprintf dei sistemi GNU), ma non sono standard.
Allora potresti usare direttamente fprintf ;)
ilsensine
07-09-2005, 07:14
Allora potresti usare direttamente fprintf ;)
Ouch! :stordita:
fantoibed
07-09-2005, 08:23
In alternativa:#include <iostream.h>
#include <fstream.h>
#include <iomanip.h>
#include <stdlib.h>
int main()
{
ofstream fp;
int x = 100;
char buffer[(sizeof(int)*8+1)];
fp.open("output.txt", ios::out);
fp<<"Binario:"<<itoa(x, buffer, 2)<<endl;
fp<<"Decimale:"<<itoa(x, buffer, 10)<<endl;
fp<<"Esadecimale:"<<itoa(x, buffer, 16)<<endl;
fp.close();
return 0;
}
Oppure:
#include <iostream>
#include <iomanip>
#include <bitset>
int main(void)
{
int x = 100;
std::cout << x << std::endl;
std::cout << std::hex << x << std::endl;
std::cout << std::bitset<8>(x) << std::endl;
}
Lo vedo meglio senza buffer ;)
fp<<"Binario:"<<itoa(x, buffer, 2)<<endl;
fp<<"Decimale:"<<itoa(x, buffer, 10)<<endl;
fp<<"Esadecimale:"<<itoa(x, buffer, 16)<<endl;
A parte la base 2, si può usare setbase di iomanip per ottenere i vari formati...fa molto più C++ :)
cout << "Base 8: " << setw(10) << setbase(ios::oct) << x << endl;
cout << "Base 16: " << setw(10) << setbase(ios::hex) << x << endl;
cout << "Base 10: " << setw(10) << setbase(ios::dec) << x << endl;
Mi vado a studiare quel bitset che non l'ho mai usato ;) Apriamo lo stroustrup :D
fantoibed
07-09-2005, 09:14
Oppure:fp<<"Esadecimale: "<<hex<<x<<endl
Ci stiamo prendendo gusto, eh! :p
DanieleC88
07-09-2005, 10:43
Ouch! :stordita:
Capita anche ai migliori... :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.