Torna indietro   Hardware Upgrade Forum > Software > Programmazione

iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
C'è tanta sostanza nel nuovo smartphone della Mela dedicato ai creator digitali. Nuovo telaio in alluminio, sistema di raffreddamento vapor chamber e tre fotocamere da 48 megapixel: non è un semplice smartphone, ma uno studio di produzione digitale on-the-go
Intel Panther Lake: i processori per i notebook del 2026
Intel Panther Lake: i processori per i notebook del 2026
Panther Lake è il nome in codice della prossima generazione di processori Intel Core Ultra, che vedremo al debutto da inizio 2026 nei notebook e nei sistemi desktop più compatti. Nuovi core, nuove GPU e soprattutto una struttura a tile che vede per la prima volta l'utilizzo della tecnologia produttiva Intel 18A: tanta potenza in più, ma senza perdere in efficienza
Intel Xeon 6+: è tempo di Clearwater Forest
Intel Xeon 6+: è tempo di Clearwater Forest
Intel ha annunciato la prossima generazione di processori Xeon dotati di E-Core, quelli per la massima efficienza energetica e densità di elaborazione. Grazie al processo produttivo Intel 18A, i core passano a un massimo di 288 per ogni socket, con aumento della potenza di calcolo e dell'efficienza complessiva.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 29-07-2005, 14:19   #1
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 6165
Strutture e files in C++

Salve ragazzi, vorrei sapere come si fa a salvare una struttura in un file. Tale struttura possiede un campo unsigned char* ed un campo int. In particolare, ho un'array di strutture da salvare in un file.Grazie.

Ultima modifica di Unrue : 29-07-2005 alle 14:26.
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 29-07-2005, 16:30   #2
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
Ci sono tanti modi per salvare una struttura in un file...
Ad esempio:

struttura s;
....
....
....
ofstream out( "out.dat", ios::binary );
out.write((char*)&s, sizeof(char)*sizeof(struttura));

Questo funziona perfettamente quando i dati da salvare sono allocati staticamente, ma se i dati (come suppongo nel tuo caso) sono allocati dinamicamente ti conviene salvare la struttura membro a membro...

Supponendo struttura in questo modo e che m2 sia la lunghezza di m1 (ci ho beccato ?):

struct struttura
{
unsigned char *m1;
int m2;
};

struttura s;
....
....
....
ofstream out( "out.dat", ios::binary );
out.write((char*)&s.m2, sizeof(int));
out.write((char*)s.m1, sizeof(unisgned char)*m2);

Per la lettura si fa l'operazione inversa con la read...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 29-07-2005, 17:11   #3
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 6165
Allora,
io ho definito il seguente array di strutture:

struct { unsigned char *code;
int nbit;
}Codici[256];

Nel main ho scritto:

ofstream out("D:/out.dat",ios::binary);

for(int g=0;g<256;g++){

out.write((char*)(Codici[g].code),sizeof(unsigned char)*code);

out.write((char*)&(Codici[g].nbit),sizeof(nbit));
}

Pero' non mi riconosce ne' il simbolo code ,nè nbit. cosa ho sbagliato?
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 29-07-2005, 17:32   #4
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
Così:

ofstream out("D:/out.dat",ios::binary);

for(int g=0;g<256;g++){

out.write((char*)&(Codici[g].nbit),sizeof(int));
out.write((char*)(Codici[g].code),sizeof(unsigned char)*dimensione);
//dimensione deve essere il numero di unsigned char allocati per il membro code
}
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 30-07-2005, 10:02   #5
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 6165
Dunque,
ho scritto:

ofstream out("D:/out.dat",ios::binary);

for(int g=0;g<256;g++){
out.write((char*)&(HuffmanCodes[g].nbit),sizeof(int));
out.write((char*)(HuffmanCodes[g].code),sizeof(unsigned char)*256);
}


ma mi da' un'errore alla riga

ofstream out("D:/out.dat",ios::binary);

di violazione di accesso nella classe template :

template <class _CharT, class _Traits>

Quindi non credo dipenda dal codice che ho scritto. In pratica non riesce a creare il file di output. Non so come mai.

Come dimensione ho provato anche ((numeroalberi-1)+8)>>3), dove numero alberi è appunto il numero degli alberi creati con il metodo di Huffman, ed è la dimensione usata quando ho scritto il codice nella struttura in questione. Solo che il problema lo dà prima di entrare nel ciclo for, quindi non ho idea da cosa dipenda.

Ultima modifica di Unrue : 30-07-2005 alle 10:06.
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 30-07-2005, 10:11   #6
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
A me il codice sotto funziona benissimo con il compilatore MinGW32...scommetto che stai usando Visual C++...

ofstream out("D:\\out.dat",ios::binary);
out.write("pippo", 5);

Altrimenti prova in questo modo:

ofstream out;

out.open("D:\\out.dat",ios::binary);
out.write("pippo", 5);

Altrimenti prova così:

fstream out;

out.open("D:\\out.dat",ios::out || ios::binary);
out.write("pippo", 5);
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 30-07-2005, 11:02   #7
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 6165
No amico, sto usando il C++Builder X

Dunque, un po' è migliorato. Ho scritto:

fstream out2;

out2.open("D:\\out.dat",ios::out || ios::binary);

int q;
while(!feof(in3))

{q=fgetc(in3);

if(q>=0)

{ out2.write((char*)&(HuffmanCodes[q].nbit),sizeof(int));

out2.write((char*)(HuffmanCodes[q].code),sizeof(unsigned char)*((numeroalberi-1)+8)>>3);

}
}

Adesso, alla riga con l'intero non dà problemi o meglio, me li dà dopo qualche ciclo, ma a quella successiva si, sempre di violazione di accesso.
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 30-07-2005, 11:21   #8
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 6165
Dunque, ho inserito il codice usando l'ofstream direttamente nella funzione in cui riempo la struttura.Ad ogni codice inserito, segue la scrittura sul file out.dat. In questo modo sembra funzionare, il file lo crea e non dà alcuna eccezione. Certo che sono strani questi compilatori )

Comunque grazie, se avro' altri problemi ti ricontattero', ciao ciao.
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 30-07-2005, 13:18   #9
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
Comunque:

sizeof(unsigned char)*(((numeroalberi-1)+8)>>3)
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2005, 16:28   #10
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 6165
Ok, la struttura l'ho salvata. Adesso ,tramite la read, come ricreo la struttura? Tale funzione vuole un buffer di ingresso ed una lunghezza prefissata. COme le imposto tutte e due partendo dal fil eaperto in cui vi è salvata la struttura? Inoltre come riconosco se quello letto è un campo unsigned char* o int?
Unrue è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
Intel Xeon 6+: è tempo di Clearwater Forest Intel Xeon 6+: è tempo di Clearwater Fore...
4K a 160Hz o Full HD a 320Hz? Titan Army P2712V, a un prezzo molto basso 4K a 160Hz o Full HD a 320Hz? Titan Army P2712V,...
Recensione Google Pixel Watch 4: basta sollevarlo e si ha Gemini sempre al polso Recensione Google Pixel Watch 4: basta sollevarl...
Trapela in rete la roadmap dei nuovi gio...
In Germania la prima centrale solare gal...
Iliad lancia TOP 250 PLUS e TOP 300 PLUS...
UE: nuovi standard per i caricabatterie,...
Fine supporto Windows 10: breve guida pr...
Cyber Arena Tour: WINDTRE BUSINESS porta...
Addio Microsoft Word: la Cina sceglie WP...
Nano Banana si espande: l’AI di Google p...
Che fare con i Tesla Cybertruck invendut...
Simucube 3 Sport, Pro e Ultimate ufficia...
Facebook rilancia le offerte di lavoro: ...
Hisense PT1: il cinema in casa con la po...
Pixel 10: come risolvere (forse) i crash...
Plenitude lancia la sua Fibra ottica: fi...
Apple TV+ elimina il 'plus' dal nome: or...
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: 13:02.


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