Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
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: 7359
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: 7359
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: 7359
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: 7359
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: 7359
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: 7359
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


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
La Serie A con DAZN e Amazon Prime con l...
Giochi Ubisoft su Steam senza Ubisoft Co...
Miami Beach ha autorizzato la maxi opera...
Apple regala un altro anno di funzioni s...
Alla fine è successo davvero: Vol...
Il meglio di Amazon del weekend in uno s...
Speciale TV in offerta su Amazon: Hisens...
Non c'è pace per Trezor: 347.000 e-mail ...
È un portatile Dell e li vale tut...
Apple iPhone 17 Pro Max 256GB a 1.195€ (...
GPT-6 Astra è davvero AGI o non s...
LG OLED G6S 48'' a 845€ e G6 55'' a 1368...
Mantax Otax: il malware Android che crip...
Musk incassa un altro maxi contratto IA:...
Le vendite di EV sono esplose in tutto 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: 22:58.


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