Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [c]File binario e struct

    Salve ho una struttura così definita:
    codice:
    structdato {    
        double valore;
        unsigned classe;
    
    };
    a struttura contiene il campo valore che descrive un certo valore numerico e il campo classe chedescrive la tipologia del dato. La classe sarà un valore tra 0 e 10.

    Devo fare una funzione così definita:

    codice:
    extern int salva_conteggio_bin (const char *filename, struct dato *pdati, unsigned int n);
    La funzione accetta come parametro un nome di file che deve essere aperto in scrittura inmodalità non tradotta (binario), un puntatore alla zona di memoria contenente variabili di tipostruct dato e il numero di dati contenuti in quella zona di memoria. La funzione deve scrivere sulfile 11 interi senza segno a 32 bit in little endian corrispondenti al numero di dati di ogni possibileclasse (da 0 a 10).

    Ad esempio, chiamando la funzione in questo modo:
    codice:
    structdato x[] = { { 0.1, 0 }, { 1.45, 2 }, { 0.81, 0 } };
    
        salva_conteggio_bin("file.bin", x, 3);
    il file file.bin, visto in un editor esadecimale conterrebbe:



    02 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00


    Ho provato a fare cosi:
    codice:
    externvoid salva_conteggio_bin(constchar *filename, structdato *pdati, unsignedintn){    
        FILE *f;
        f = fopen(filename, "wb");
        int i;
        int count[11] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
    
        for (i = 0; i < n; i++){
            count[pdati[i].classe]++;
        }
    
        for (i = 0; i < 11; i++){
            fprintf(f,"%0.8x ", count[i]);
        }
    }
    Non riesco a capire come formattare i dati esadecimali e come trasformali in little endian.
    grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    No ... il problema non è chiaro ...

    Nell'esempio che hai fatto hai 3 strutture ... cosa devi salvare su file?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Devo scrivere sul file 11 interi senza segno a 32 bit in little endian corrispondenti al numero di dati di ogni possibile classe (da 0 a 10).
    Cioè devo scrivere quanti valori ho per ognuna classe.Ad esempio:
    Valore: Classe:
    0.1 0
    1.45 2
    0.81 0

    Ho 2 valori per la classe 0 ed un valore per la classe 2.Le classi vanno da 0 a 10 compreso
    quindi avrò :

    2 0 1 0 0 0 0 0 0 0 0 0

    Questa sequenza devo scriverla in un file binario, visto in un editor esadecimale sarà
    così:

    02 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00

    Io aprendo il file.bin con un editor esadecimale ho questo risultato:
    00000002 00000000 00000001 00000000
    00000000 00000000 00000000 00000000
    00000000 00000000 00000000


    Ultima modifica di andrea485; 11-02-2014 a 15:17

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Ah ok, quindi elimina completamente la for

    codice:
    for(i =0; i <11; i++){
            fprintf(f,"%0.8x ", count[i]);
        }
    


    che non salva in binario ma in ASCII e metti la semplice linea

    codice:
    fwrite(count, sizeof(count), 1, f);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Grazie mille funziona tutto perfettamente.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.