Torna indietro   Hardware Upgrade Forum > Software > Programmazione

ASUS Zenbook 14 (UX3480AA): tanta autonomia con uno chassis bello e robusto
ASUS Zenbook 14 (UX3480AA): tanta autonomia con uno chassis bello e robusto
Lo chassis in Ceraluminium è il cuore di questo notebook in edizione 2026, un modello pensato per garantire produttività con le tipiche applicazioni di produttività personale e capace di offrire un'autonomia di funzionamento lontano dalla presa di corrente da riferimento. Potenza, facilità di trasporto e costruzione robusta tutto in un notebook compatto.
Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura
Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura
Il primo Micro RGB di Samsung per il salotto è il 65 pollici da 2.749 euro. Sul banco di misura abbiamo rilevato 2.000 nit di picco, nero assoluto con il local dimming e il 91,4% del BT.2020, il colore più ampio che abbiamo misurato su un LCD
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
Apple ha rinnovato iPhone 18 Pro soprattutto dentro: chip A20 Pro a 2 nm con memoria affiancata al SoC, camera di vapore tre volte più ampia, Dynamic Island più piccola del 25% grazie a Face ID sotto il display e fotocamera principale con diaframma variabile da f/1.48 a f/4. Lo abbiamo misurato al colorimetro e nei benchmark, usato con iOS 27 e messo alla prova in fotografia tra laghi, borghi e interni poco illuminati
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 30-07-2007, 10:49   #1
uReverendo
Member
 
L'Avatar di uReverendo
 
Iscritto dal: May 2006
Messaggi: 69
[C++] Salvataggio di strutture in file

Devo salvare (e leggere) una stuttura su file. Purtroppo non posso farlo direttamente perchè la struttura contiene un campo string, quindi ho pensato di usare questo metodo:

Codice:
struct Persona
{
	int		iUnk1;
	int		iUnk2;
	unsigned char	bMd5[16];
	string		strNome;
};

bool ReadFile(string strFile, vector<Persona> &vp)
{
	ifstream	f;
	unsigned int	uiszStruct;
	Persona		p;

	f.open(strFile.c_str(),ios::binary);

	if(!f)
	{
		cout << "Errore" << endl;
		return false;
	}

	uiszStruct = sizeof(Persona) - sizeof(string);

	while(!f.eof())
	{
		f.read((char *)&p, uiszStruct);
		ReadString(f, p.strNome);
		
		if(f.good())
		{
			vp.push_back(p);
		}
	}
}

bool WriteFile(string strFile, vector<Persona> &vp)
{
	ofstream f;
	unsigned int uiszStruct;

	f.open(strFile.c_str(),ios::binary);

	if(!f)
	{
		cout << "Errore" << endl;
		return false;
	}

	uiszStruct = sizeof(Persona) - sizeof(string);
	for(int i=0; i<vp.size(); i++)
	{
		f.write((char *)&vp[i], uiszStruct);
		WriteString(f,vp[i].strNome);
	}
	
}
Così funziona, però è corretto fare in questo modo o si possono verificare dei problemi? Alternative? (oltre al salvataggio campo per campo)

Infine i compilatori allocano SEMPRE i campi della struttura nell'ordine in cui vengono dichiarati (in questo caso int - int - unsigned char - string) oppure a seguito di qualche ottimizzazione l'ordine può essere stravolto?
uReverendo è offline   Rispondi citando il messaggio o parte di esso
Old 31-07-2007, 10:02   #2
uReverendo
Member
 
L'Avatar di uReverendo
 
Iscritto dal: May 2006
Messaggi: 69
up

E' corretto salvare un struttura in questo modo?
uReverendo è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2007, 08:34   #3
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Dovrebbe andare bene perché la stringa è in fondo alla struttura dati.
Se non lo fosse ti converrebbe salvare e rileggere comunque anche la stringa e successivamente salvare e rileggere la stringa come fai ora.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2007, 09:47   #4
uReverendo
Member
 
L'Avatar di uReverendo
 
Iscritto dal: May 2006
Messaggi: 69
Ok, grazie
uReverendo è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2007, 11:06   #5
uReverendo
Member
 
L'Avatar di uReverendo
 
Iscritto dal: May 2006
Messaggi: 69
Ho fatto altre prove e purtroppo non sembra andare bene (uso il visual studio 2005).

Ho notato che quando uso strutture che contengono campi a 64 bit (__int64) il compilatore tende ad allineare tutti i membri a 64 bit con il risultato che la dimensione della struttura non sempre coincide con la somma delle dimensioni dei singoli membri. Nel mio caso se il compilatore decide di aumentare la dimensione del campo string ottengo risultati imprevisti.

Salvare tutta la struttura come mi ha suggerito cionci lo escludo sia perchè la classe string il modalità debug è grande 32 Byte mentre in release è qrande 28 Byte, sia per evitare di sprecare spazio (le strutture da salvare sono parecchie migliaia)

Per risolvere il problema ho pensato di raggruppare i membri fissi in un'altra struttura e salvare direttamente quella:
Codice:
struct Persona_Dati
{
	int		iUnk1;
	int		iUnk2;
	unsigned char	bMd5[16];
};
struct Persona
{
        Persona_Dati    Dati;
	string		strNome;
};
Che ne pensate?

P.S. La struttura che ho postato è solo un esempio, quella reale è molto più grande.
uReverendo è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


ASUS Zenbook 14 (UX3480AA): tanta autonomia con uno chassis bello e robusto ASUS Zenbook 14 (UX3480AA): tanta autonomia con ...
Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura Samsung Micro RGB R95H, il primo LCD a LED rossi...
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre iPhone 18 Pro: la recensione del miglior iPhone ...
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34 Panasonic, 30 anni di Toughbook: la "Bibbia...
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione realme C100x, lo smartphone economico con la bat...
Spotifast sfida Spotify: il client open ...
Oltre i benchmark: le specifiche importa...
Euro digitale, la BCE fissa le date dei ...
Photopea, polemica con GitHub: le copie ...
Curiosity fotografa l'alba su Marte: le ...
Amazon Kids+ arriva in Italia: giochi, v...
Amazon svela i nuovi Alexa Tablet! Googl...
OPPO Find X10 Series sarà present...
Google e Zuckerberg puntano sulla cellul...
MSI Prestige N16 Flip AI+ disponibile su...
Proofpoint presenta Agentic Data and AI ...
Instagram porta i nuovi strumenti di edi...
NVIDIA, l'accordo da 20 miliardi con Gro...
Una macchina da caffè ha generato 1 TB i...
Samsung, vendere smartphone conviene sem...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 19:24.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v