Hi,
I´ve written this program to input some data, and make some calculation on this data. Problem is that I cannot get the input working. I´ve copied the code from another program of mine where there are no problems. I´m using DJGPP, and I´ve tried to compile it on Solaris too. On Solaris it works fine - THE SAME CODE!!1
Can anyone help me explain this??
Code is as goes:
Code:#include <math.h> #include <stdlib.h> #include <fstream> #include <iostream> using namespace std; void calcProbs(unsigned char* data ,int* probs,int size); double getEntropy(int* probs,int size); void makeDiffs(unsigned char* data,int size); #define MAXFILESIZE 1000000 int main(int argc,char** argv){ unsigned char* data; // Data buffer unsigned char* data2; // Data buffer int i,j; // Loop vars int probs[256]; // Probability vars double entropy; // Calculated Entropy ifstream in; // Input Filestream char* temp; // Temporary var if(argc!=2){ cerr << "Wrong number of arguments" << endl; return 0;} data=(unsigned char*) malloc(MAXFILESIZE); // Alloc some memory if(data==NULL){ return 0; } data2=(unsigned char*) malloc(MAXFILESIZE); // Alloc some memory if(data2==NULL){ free(data); return 0; } i=0; in.open(argv[1],ifstream::in); // open file while(in.good()){ data[i++]=in.get(); } in.close(); // close file // Read input! cout << i << endl; // Output numbers of bytes read calcProbs(data,probs,i); entropy=getEntropy(probs,i); cout << "original entropy: " << entropy << endl; makeDiffs(data,i); calcProbs(data,probs,i); entropy=getEntropy(probs,i); cout << "difference entropy: " << entropy << endl; free(data); free(data2); } void calcProbs(unsigned char* data ,int* probs,int size){ int i; unsigned char c; for(i=0;i<256;i++){ probs[i]=0; } for(i=0;i<size;i++){ c=data[i]; probs[c]++; } } double getEntropy(int* probs,int size){ int i; double size2,temp,temp2; temp2=0.0; size2=(double) size; for(i=0;i<256;i++){ if(probs[i]){ temp=(double) probs[i]; temp/=size2; temp2+=temp*log(temp); } } temp2/=log(2.0); temp2=-temp2; return temp2; } void makeDiffs(unsigned char* data,int size){ unsigned char c,d; int i; c=0; for(i=0;i<size;i++){ d=data[i]; data[i]=d-c; c=d; } }



LinkBack URL
About LinkBacks



There's still a problem though, you might find it's one byte out. If you can't work that one out, ask again...