#include #include #include using namespace std; enum Mode { as_float, as_long }; int main (int argc, char** argv) { Mode mode = as_float; bool verbose = false; bool use_stdin = false; for (int i = 1; i < argc; i++) { if (! strcmp (argv[i], "-l")) { mode = as_long; continue; } if (! strcmp (argv[i], "-f")) { mode = as_float; continue; } if (! strcmp (argv[i], "-v")) { verbose = true; continue; } if (! strcmp (argv[i], "-")) { use_stdin = true; } else { use_stdin = false; } FILE* file; if (use_stdin) { file = stdin; if (verbose) printf ("reading from stdin\n"); } else { file = fopen (argv[i], "rb"); if (verbose) printf ("reading from file: %s\n", argv[i]); if (! file) { fprintf (stderr, "error reading from file %s, skipping\n", argv[i]); continue; } } int address=0; switch (mode) { case as_float: while (1) { float data = 0; fread (&data, sizeof(float), 1, file); if (feof (file) || ferror (file)) break; printf ("%+0.6f 0x%0.4X\n", data, address); address += sizeof(float); } break; case as_long: while (1) { long data = 0; fread (&data, sizeof(long), 1, file); if (feof (file) || ferror (file)) break; printf ("%+08li 0x%0.4X\n", data, address); address += sizeof(long); } break; } if (! use_stdin) { fclose (file); } } }