Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super
Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super
Arrivato sul mercato italiano a fine marzo, la serie Boox Go 10.3 (Gen II) offre Android 15, penna da 4096 livelli e retroilluminazione opzionale (nel modello da noi provato, Lumi, presente). La serie si compone di due tablet ePaper che fanno da e-reader, blocco note digitale e persino browser, tutto a un prezzo che fa dimenticare i prodotti di brand più blasonati
Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming
Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming
Pannello QD-OLED da 32 pollici con risoluzione 4K, frequenza di aggiornamento a 240Hz e tempi di risposta rapidissimi: il Gigabyte MO32U24 evolve il progetto del suo predecessore MO32U e alza ulteriormente l'asticella delle prestazioni. È ancora una volta un monitor indirizzato ai giocatori più esigenti
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh
realme 16 5G è un nuovo smartphone con sensore Sony IMX 852 da 50MP sul retro e uno specchio selfie fisico integrato nella camera bar, una prima nel segmento di mercato. Batteria da 6550mAh in un corpo da 8,1mm e 183g, certificazione IP69K e ricarica da 45W completano un pacchetto aggressivo per la fascia media, per uno dei prodotti più interessanti del produttore sul piano commerciale
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: 7052
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: 7052
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: 7052
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: 7052
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: 7052
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: 7052
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


Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con ...
Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming Gigabyte MO32U24 OLED: il 4K a 240Hz su un panne...
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh Recensione realme 16 5G: lo smartphone con Selfi...
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni Come rispettare tutte le nuove regole per i mono...
DLSS 4.5: con Dynamic Frame Generation e MFG 6X NVIDIA alza la posta DLSS 4.5: con Dynamic Frame Generation e MFG 6X ...
Isar Aerospace rinvia ancora il lancio d...
La nomina di Luca Parmitano per la missi...
Controaccusa di Netgear a TP-Link: 'non ...
GoldenEye 007: dopo oltre 20 anni, &egra...
Snowflake arricchisce le funzionalit&agr...
American Express pronta ad acquisire The...
Batterie liquide senza metalli: scoperto...
FRITZ!, devolo, LANCOM e TDT danno vita ...
Quanto tempo passiamo online? In Italia ...
Fox Corporation si compra Roku per 22 mi...
AMD resuscita Zen+: due nuovi processori...
Debutto cinematografico per HONOR Robot ...
Copilot+ PC, ogni PC con una GPU dedicat...
Dreame taglia i prezzi: come orientarsi ...
L'Italia entra nell'era dei 2 nanometri!...
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: 00:15.


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