Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1

    [C++] intero più grande

    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!

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    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

  3. #3
    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...

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    che compilatore usi vc++ 2005 o 2008? usa longlong

  5. #5
    Originariamente inviato da Stoicenko
    che compilatore usi vc++ 2005 o 2008? usa longlong
    ehm... 6.0

  6. #6
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    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

  7. #7
    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.

  8. #8
    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);
    .
    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?

    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
    codice:
    fread(Var,LenRecord,1,fpi);
    ByteLetti+=LenRecord;
    al posto di contare i byte che leggo facendo una somma, posso ottenere la posizione corrente del puntatore nel file di input?

  9. #9
    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?
    Devi usare un unsigned long, oppure, se non ti interessa avere il numero esatto, un double.
    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.

  10. #10
    Originariamente inviato da MItaly
    Devi usare un unsigned long
    ...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
    , oppure, se non ti interessa avere il numero esatto, un double.
    ...purtroppo il numero deve essere esatto.

    Originariamente inviato da MItaly
    Comunque il tipo standard per le dimensioni degli oggetti è size_t.
    .... non capisco il significato della tua frase, ma provo a fare una ricerca per capire...

    Originariamente inviato da MItaly
    In ogni caso da quanto leggo in giro VC++ 6 supporta gli interi a 64 bit, prova il tipo __int64.
    ...tra poco lo provo e ti saprò dire

    grazie!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.