#include#include #include #define BUFFER_SIZE 4096 int main(argCount, argVectorPtr) int argCount; char *argVectorPtr[]; { FILE *inputFile, *outputFile; float floatVariable; int scanfReturnCode, count, bigEndianMachine; char buffer[BUFFER_SIZE]; char *inputFilename, *outputFilename; float testFloat; unsigned char *testPtr; printf("[asc2bin 0.3] 04/18/2000 B.J. Guillot bguillot@acm.org\n"); if (argCount != 3) { /* two arguments required */ printf("Syntax: asc2bin inputfilename outputfilename\n\n"); printf("'inputfilename' must be an ASCII text file containing ASCII\n"); printf("representation of floating point numbers. 'outputfilename' will\n"); printf("be created/overwritten and containg IEEE-754 single precision\n"); printf("Big-Endian floating point format binary representation.\n"); exit(1); } count = 0; inputFilename = argVectorPtr[1]; outputFilename = argVectorPtr[2]; testFloat = 1.0; testPtr = (unsigned char*)&testFloat; if ((testPtr[0] == 0) && (testPtr[1] == 0) && (testPtr[2] == 0x80) && (testPtr[3] == 0x3f)) { printf("Little endian machine detected.\n"); bigEndianMachine = 0; /* detected a little-endian machine, PC */ } else if ((testPtr[0] == 0x3f) && (testPtr[1] == 0x80) && (testPtr[2] == 0) && (testPtr[2] == 0)) { printf("Big endian machine detected.\n"); bigEndianMachine = 1; /* detected a big-endian machine, workstation */ } else { printf("This machine does not apparently support IEEE-754 format!\n"); exit(1); } printf("Input file: %s\n", inputFilename); inputFile = fopen(inputFilename, "rt"); printf("Output file: %s\n", outputFilename); outputFile = fopen(outputFilename, "wb"); do { scanfReturnCode = fscanf(inputFile, "%f", &floatVariable); if (scanfReturnCode == 1) { count++; testPtr = (unsigned char*)&floatVariable; if (bigEndianMachine) { fputc(testPtr[0], outputFile); fputc(testPtr[1], outputFile); fputc(testPtr[2], outputFile); fputc(testPtr[3], outputFile); } else { /* program running on Little-Endian machine */ fputc(testPtr[3], outputFile); fputc(testPtr[2], outputFile); fputc(testPtr[1], outputFile); fputc(testPtr[0], outputFile); } } else if (scanfReturnCode == 0) { fscanf(inputFile, "%s", buffer); printf("WARNING: Cannot convert '%s' into float\n", buffer); } } while (scanfReturnCode != EOF); printf("%d elements successfully scanned and converted.\n", count); fclose(inputFile); fclose(outputFile); return(0); }