Ciao a tutti,
esiste un modo per caricare in una variabile un numero più grande di un long?
Devo dire ad un programma di posizionarsi tramite fseek ad un certo byte di un file di circa 3gb...
grazie!
Ciao a tutti,
esiste un modo per caricare in una variabile un numero più grande di un long?
Devo dire ad un programma di posizionarsi tramite fseek ad un certo byte di un file di circa 3gb...
grazie!
Penso ti basi un unsigned int che ti consente di arrivare fino a 4294967295, che per un file di 3 GB dovrebbe bastare.
In alternativa ci sarebbe il long long int, intero su 8 byte (quindi ben oltre i 3 miliardi), che mi pare sia standard...
every day above ground is a good one
la variabile è dichiarata unsigned long, ma non riesco ad associarle un numero superiora ai 2gb (come se fosse una semplice long).
Il compilatore (Microsoft) non mi accetta la dichiarazione long long int...
che compilatore usi vc++ 2005 o 2008? usa longlong
ehm...Originariamente inviato da Stoicenko
che compilatore usi vc++ 2005 o 2008? usa longlong6.0
Passa al 2008 express e usa __int64
"Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)
"Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)
http://xvincentx.netsons.org/programBlog
fseek accetta un parametro di tipo long (con segno, visto che fseek consente anche spostamenti relativi), che in VC++ è a 32 bit. Questo significa che in un solo colpo non ti puoi muovere oltre i 2 GB, ma puoi provare a vedere se puoi risolvere con due fseek:
.codice:fseek(fp,2147483647,SEEK_SET); fseek(fp,1073741825,SEEK_CUR);
Amaro C++, il gusto pieno dell'undefined behavior.
grazie MItaly, questa è un problema che ancora non ho affrontato, sicuramente ne avrò bisogno nel programma. Ora però devo risolvere il problema iniziale: come faccio a inserire in una variabile un numero superiore a 2147483647?Originariamente inviato da MItaly
fseek accetta un parametro di tipo long (con segno, visto che fseek consente anche spostamenti relativi), che in VC++ è a 32 bit. Questo significa che in un solo colpo non ti puoi muovere oltre i 2 GB, ma puoi provare a vedere se puoi risolvere con due fseek:
.codice:fseek(fp,2147483647,SEEK_SET); fseek(fp,1073741825,SEEK_CUR);
Se non si può mi hai comunque fatto venire in mente un'altra possibile strada:
per il momento leggo il file di input e ogni tanto memorizzo in una variabile il numero di byte corrente che mi calcolo facendo una somma dei bite letti ad ogni lettura
al posto di contare i byte che leggo facendo una somma, posso ottenere la posizione corrente del puntatore nel file di input?codice:fread(Var,LenRecord,1,fpi); ByteLetti+=LenRecord;
Devi usare un unsigned long, oppure, se non ti interessa avere il numero esatto, un double.Originariamente inviato da Luciano79
grazie MItaly, questa è un problema che ancora non ho affrontato, sicuramente ne avrò bisogno nel programma. Ora però devo risolvere il problema iniziale: come faccio a inserire in una variabile un numero superiore a 2147483647?
Comunque il tipo standard per le dimensioni degli oggetti è size_t.
---EDIT---
In ogni caso da quanto leggo in giro VC++ 6 supporta gli interi a 64 bit, prova il tipo __int64.
Amaro C++, il gusto pieno dell'undefined behavior.
...lo sono già sia ByteLetti che LenRecord. Nella mia ignoranza e preso dal panico ho trasformato tutti i long in unsigned long.Originariamente inviato da MItaly
Devi usare un unsigned long
...purtroppo il numero deve essere esatto.Originariamente inviato da MItaly
, oppure, se non ti interessa avere il numero esatto, un double.
.... non capisco il significato della tua frase, ma provo a fare una ricerca per capire...Originariamente inviato da MItaly
Comunque il tipo standard per le dimensioni degli oggetti è size_t.
...tra poco lo provo e ti saprò direOriginariamente inviato da MItaly
In ogni caso da quanto leggo in giro VC++ 6 supporta gli interi a 64 bit, prova il tipo __int64.
grazie!!!