Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DJI Lito 1 e Lito X1 recensione: i nuovi droni per principianti che non si fanno mancare nulla
DJI Lito 1 e Lito X1 recensione: i nuovi droni per principianti che non si fanno mancare nulla
DJI ha appena ufficializzato la serie Lito, la sua nuova gamma di droni entry-level destinata a chi si avvicina per la prima volta alla fotografia aerea. Al centro dell'annuncio ci sono due modelli ben distinti per fascia di prezzo e specifiche tecniche: DJI Lito 1 e DJI Lito X1. Entrambi si collocano sotto la soglia regolamentare dei 249 grammi, che permette di volare con requisiti burocratici più semplici rispetto ai droni più pesanti.
Sony World Photography Awards 2026: i premiati, anche italiani, il punto sulla fotografia di oggi
Sony World Photography Awards 2026: i premiati, anche italiani, il punto sulla fotografia di oggi
Siamo stati a Londra per la premiazione dei Sony World Photography Awards 2026, l'evento a tema fotografia più prestigioso. Fra sorprese e novità, ne approfittiamo per fare il punto sulla fotografia contemporanea, in cui la didascalia è sempre più necessaria a cogliere il senso della quasi totalità degli scatti.
Una settimana con Hyundai Ioniq 5 N-Line: diverte e convince
Una settimana con Hyundai Ioniq 5 N-Line: diverte e convince
L'elettrica di casa Hyundai propone una versione AWD con estetica derivata dalla famiglia N. L'abbiamo provata per diversi giorni, per scoprire tutti i dettagli e la vera autonomia in autostrada
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


DJI Lito 1 e Lito X1 recensione: i nuovi droni per principianti che non si fanno mancare nulla DJI Lito 1 e Lito X1 recensione: i nuovi droni p...
Sony World Photography Awards 2026: i premiati, anche italiani, il punto sulla fotografia di oggi Sony World Photography Awards 2026: i premiati, ...
Una settimana con Hyundai Ioniq 5 N-Line: diverte e convince Una settimana con Hyundai Ioniq 5 N-Line: divert...
Recensione OPPO Find X9 Ultra: è lui il cameraphone definitivo Recensione OPPO Find X9 Ultra: è lui il c...
Ecovacs Deebot X12 OmniCyclone: lava grazie a FocusJet Ecovacs Deebot X12 OmniCyclone: lava grazie a Fo...
Apple prepara un restyling per la linea ...
Il MacBook Neo trascinerà Apple: ...
I genitori potranno verificare gli argom...
ESA e Northrop Grumman confermano la cor...
Il telescopio spaziale Nancy Grace Roman...
iPhone Ultra, periodo di lancio conferma...
Un anno fa debuttava Clair Obscur:&...
Tutte le offerte sugli smartphone ora pi...
Tutte le offerte sui TV ora su Amazon: u...
Xbox Game Pass sarà disponibile a...
La serie HONOR 600 avrà presto un...
Mova Viax 250 in prova: il robot tagliae...
Fat e-bike per tutti: sconti Engwe, pi&u...
Google conferma l'arrivo della nuova ver...
Apple ha trovato il modo per abbassare i...
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: 05:21.


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