Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    21

    lettura e scrittura float su file binario

    Non capisco dove sia l'errore per effettuare la scrittura e la lettura dallo stesso file binario di float.
    In pratica il risultato che mi viene mostrato a video è

    5.25282e-33
    7.00649e-45
    0
    3.50325e-44
    0


    Spero che possiate aiutarmi, vi posto il codice almeno diventa più semplice capire dove possa essere l'errore,

    codice:
    #include<stdio.h>
    #include<fstream>
    #include<string.h>
    #include<sstream>
    #include<iostream>
    
    using namespace std;
    
    int main(){
    
    ofstream direct_bin;
    string fold="./FILES/";
    string echo=fold+"file_float.dat";
    direct_bin.open(echo.c_str(),ios::out | ios::binary);
    
    
    int size1=5;
    float * buffer;
    buffer = new (nothrow) float [size1];
    
    if(!buffer){cout<<"errore buffer"<<endl;
    	   return 1;
    	   }
    
    buffer[0]=4.5;
    buffer[1]=10e5;
    buffer[2]=3.22;
    buffer[3]=10e2;
    buffer[4]=0.783;
    
    direct_bin.write(reinterpret_cast<char*>(buffer),size1);
    
    delete[] buffer;
    
    direct_bin.close();
    
    
        int n_elements=0;
        float * sign;
        char * memblock;
        string direct_signal="file_float.dat";
    
        char* fileN = new char[direct_signal.length()+1];
      
        strcpy(fileN,direct_signal.c_str());
    
        // apre il file e posiziona il cursore alla fine
        ifstream file (fileN,ios::in|ios::binary|ios::ate);
        ifstream::pos_type size;
    
        if (file.is_open())
            {
    
            size = file.tellg();
            memblock = new char [size];
            n_elements = int(size);
    	cout<<"elementi = "<<n_elements<<endl;
    
            sign=new float[n_elements];
            file.seekg (0, ios::beg);
            file.read (memblock, 5);
            memcpy (sign,memblock,sizeof(float)*n_elements);
            
            delete [] memblock;
            file.close();
            }
          else
        	  {cerr<<"File "<<direct_signal<<" not found"<<endl;
    	   return -1;
        	  }
    
    for(int i=0;i<n_elements;i++)
    cout<<sign[i]<<endl;
    
    return 0;
    
    	}
    Grazie
    Pretendo "Done"

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Scrivi un array di float di dimensione 5 e leggi un array di char di dimensione 5.
    In altre parole è l'array sign che devi usare per leggere, non quello di char memblock.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

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.