oh man
My program doesnt work, but ill post it just to keep people updated.
i had to convert Header[] and Data[][] from big endian to little endian and here is where i am now:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>
#define RowsInArray 10000
//#define MAXNumberOfFiles 20
#define ByteSwap5(x) ByteSwap((unsigned char *) &x,sizeof(x))
void ByteSwap(unsigned char * b, int n)
{
unsigned char temp;
register int i = 0;
register int j = n-1;
while (i<j)
{
temp = b[i];
b[i] = b[j];
b[j] = temp;
i++;
j--;
}
}
int main(){
FILE *f[20];
FILE *fbin;
double Header[5]={3,1,1000000,0,0.00015625};
char FileName[255];
char BaseName[] = "Chan%.0d.csv";
int i,j,k;
int n=5;
register int m;
short NumberOfFiles = 1;
//int RowsInArray = 10000;
int TotalRows = 128000000;
unsigned short *Data[RowsInArray];//[RowsInArray][NumberOfFiles];
unsigned short DataPoint, DataPt2;
//open binary file
fbin = fopen("BinaryData.log", "wb");
if (fbin==NULL){
printf("Couldn't open binary file\n");
exit(1);
}
//convert header
for (m=0; m<n; m++) {
ByteSwap5(Header[m]);
}
fwrite(Header, sizeof(Header[0]), 1, fbin);
//open csv files
for (i=0; i<NumberOfFiles; i++){
//create filename to open
sprintf(FileName, BaseName, (i+1));
//open files
f[i] = fopen(FileName, "r");
if (f[i] ==NULL){
printf("Couldn't open csv file\n");
exit(1);
}
}
//dynamically make array to hold data before placing in binary
for (i = 0; i < RowsInArray; i++)
Data[i] = (void *)malloc(sizeof(short) * NumberOfFiles);
//loop until all data taken
for (k=0; k<(TotalRows/RowsInArray); k++){
//put data in array
for (i=0; i<NumberOfFiles; i++){
for (j=0; j<RowsInArray; j++){
fscanf(f[i], "%d", &DataPoint);
//DataPoint = 1;
DataPoint = DataPoint/2;
DataPt2 = ntohs(DataPoint);
Data[j][i] = DataPt2;
}
}
fwrite(Data, sizeof(Data[0]), 1, fbin);
}
//free malloc'd Data
for (i=0; i<NumberOfFiles; i++)
free(Data[i]);
//(Data) was not malloc'd just its elements were
//Close csv Files
for (i=0; i<NumberOfFiles; i++)
fclose(f[i]);
//close Binary
fclose(fbin);
}