#include #include #include typedef unsigned long int uli; main(int argc, char** argv) { unsigned char array[12]; FILE* fpIn; unsigned long int yyddd; unsigned long int msecs; unsigned long int dcounts; FILE* fpOut; unsigned long int year; unsigned long int day; unsigned long int integ, header_byte, subheader; unsigned long int header, version; double UTtime; double counts; char infile[50]; char outfile[50]; if ((argc == 2) || ((argc > 3))) { printf("\nWrong arguments, should be:\nbinary_reader"); printf("\n or \nbinary_reader infile_name outfile_name"); printf("\n\n"); exit(0); } if (argc == 1) { printf("\nPlease specify input filename: "); gets(infile); printf("\nPlease specify output filename: "); gets(outfile); } if (argc == 3) { strcpy(infile, argv[1]); strcpy(outfile, argv[2]); } fpIn = fopen(infile, "r+b"); fpOut = fopen(outfile, "w"); while(fread((char*) array, 1, 12, fpIn)) { header_byte = (uli)(array[0]); version = header_byte & 0003; header = header_byte - version; subheader = (uli)(array[1]); yyddd = ((uli)(array[2]))*256 + ((uli)(array[3])); year = yyddd/1000 + 1990; day = yyddd%1000; msecs = (((uli)(array[4]))*256*256*256) + (((uli)(array[5]))*65536) + (((uli)(array[6]))*256) + ((uli)(array[7])); UTtime = ((double)(msecs))/36000000; dcounts = ((uli)(array[8]))*65536 + ((uli)(array[9]))*256 + ((uli)(array[10])); counts = ((double)dcounts)/2; integ = (uli)(array[11]); if (yyddd == 0) break; fprintf(fpOut, "%3lu %lu %3lu %4lu %3lu %11.8lf %11.2lf %3lu\n", header, version, subheader, year, day, UTtime, counts, integ); } fclose(fpIn); fclose(fpOut); }