beh...perchè no? non mi cambia molto tra big-endian e little-endianOriginariamente inviato da oregon
La cosa principale che non hai spiegato è : perchè big-endian ... ??
beh...perchè no? non mi cambia molto tra big-endian e little-endianOriginariamente inviato da oregon
La cosa principale che non hai spiegato è : perchè big-endian ... ??
Alla batteria dai retta ballA
Ma scusa ... mi sento un po' rimbecillito ... tu puoi salvare semplicemente il contenuto della memoria senza dovere agire sull'ordine dei byte e, invece, ti e ci complichi la vita con una marea di codice che in realtà non ti serve ??Originariamente inviato da gianvituzzi
beh...perchè no? non mi cambia molto tra big-endian e little-endian
Avremmo risolto una decina di post fa se ci avessi detto che l'ordine dei byte non importava ... t'avrei detto semplicemente di fare una
write
e una
read
indicando l'indirizzo della struttura e la sua lunghezza, senza altre operazioni ...!
No MP tecnici (non rispondo nemmeno!), usa il forum.
Be'... di solito se devi scrivere dati binari usi il formato nativo della tua piattaforma, che, nel caso dell'architettura Intel, è little-endian, per motivi di comodità e di performance (non devi riordinare i byte). Per scrivere il valore di una variabile in binario con endiannes nativa infatti ti basta fare:
, e per rileggerlo basta fare:codice:stream.write((char *)&variabile,sizeof(variabile));
mentre per scriverlo/leggerlo con byte ordering opposto devi scambiarne i byte prima di scriverlo/dopo averlo letto.codice:stream.read((char *)&variabile,sizeof(variabile));
Amaro C++, il gusto pieno dell'undefined behavior.
oh, ca**o...Originariamente inviato da MItaly
Be'... di solito se devi scrivere dati binari usi il formato nativo della tua piattaforma, che, nel caso dell'architettura Intel, è little-endian, per motivi di comodità e di performance (non devi riordinare i byte). Per scrivere il valore di una variabile in binario con endiannes nativa infatti ti basta fare:
, e per rileggerlo basta fare:codice:stream.write((char *)&variabile,sizeof(variabile));
mentre per scriverlo/leggerlo con byte ordering opposto devi scambiarne i byte prima di scriverlo/dopo averlo letto.codice:stream.read((char *)&variabile,sizeof(variabile));![]()
Alla batteria dai retta ballA
veramente mea culpa! se avessi saputo che era così facile...
Codice PHP:int _tmain()
{
{
int num1 = 10;
int num2 = 6553500;
char buff[256] = _T("Hello World!");
char text[512] = _T("How are you?");
std::ofstream hfile;
hfile.open(szFile, std::ios::out|std::ios::binary);
if(hfile.bad())
return -1;
hfile.write( (char *)&num1, sizeof(num1) );
hfile.write( (char *)&num2, sizeof(num2) );
hfile.write( (char *)&buff, sizeof(buff) );
hfile.write( (char *)&text, sizeof(text) );
hfile.close();
}
{
int num1 = 0;
int num2 = 0;
char buff[256] = {0};
char text[512] = {0};
std::ifstream hfile;
hfile.open(szFile, std::ios::in|std::ios::binary);
if(hfile.bad())
return -1;
hfile.read( (char *)&num1, sizeof(num1) );
hfile.read( (char *)&num2, sizeof(num2) );
hfile.read( (char *)&buff, sizeof(buff) );
hfile.read( (char *)&text, sizeof(text) );
hfile.close();
std::cout << num1 << std::endl;
std::cout << num2 << std::endl;
std::cout << buff << std::endl;
std::cout << text << std::endl;
}
system("pause");
return EXIT_SUCCESS;
}
Alla batteria dai retta ballA
Probabilmente, quando ti chiedevoOriginariamente inviato da gianvituzzi
veramente mea culpa! se avessi saputo che era così facile...
mi chiarisci un attimo perchè stai facendo tutte queste operazioni
e quando shodan e io ti chiedevamo il
perchè dell'ordine dei byte
c'era un motivo ...
Se solo avessi risposto ...
No MP tecnici (non rispondo nemmeno!), usa il forum.