void reverse_hdr(AnalyzeHeader *hdr) { int i; // header key reverse_int(&(*hdr).sizeof_hdr); reverse_int(&(*hdr).extents); reverse_short(&(*hdr).session_error); // image dimension for(i=1;i<8;i++) reverse_short(&(*hdr).dim[i]); // dim[0]<0 or dim[0]>15 => little endian for(i=0;i<7;i++) reverse_short(&(*hdr).unused[i]); reverse_short(&(*hdr).datatype); reverse_short(&(*hdr).bitpix); reverse_short(&(*hdr).dim_un0); for(i=0;i<8;i++) reverse_float(&(*hdr).pixdim[i]); reverse_float(&(*hdr).vox_offset); for(i=0;i<3;i++) reverse_float(&(*hdr).funused[i]); reverse_float(&(*hdr).cal_max); reverse_float(&(*hdr).cal_min); reverse_float(&(*hdr).compressed); reverse_float(&(*hdr).verified); reverse_int(&(*hdr).glmax); reverse_int(&(*hdr).glmin); // data history reverse_int(&(*hdr).views); reverse_int(&(*hdr).vols_added); reverse_int(&(*hdr).start_field); reverse_int(&(*hdr).field_skip); reverse_int(&(*hdr).omax); reverse_int(&(*hdr).omin); reverse_int(&(*hdr).smax); reverse_int(&(*hdr).smin); }
void reverse_img(char *img, AnalyzeHeader hdr) { int i,sz=hdr.dim[1]*hdr.dim[2]*hdr.dim[3]; switch(hdr.datatype) { case 2: break; case 4: for(i=0;i<sz;i++) reverse_short(&((short*)img)[i]); break; case 8: for(i=0;i<sz;i++) reverse_int(&((int*)img)[i]); break; case 16:for(i=0;i<sz;i++) reverse_float(&((float*)img)[i]); break; } }
int main (int argc, char **argv) { const char *binfile = "fedstl.bin"; const char *datfile = "fedstl.dat"; char datpath[512]; int swap_ends = 0; FILE *fdat, *fbin; double xx; float x; if (argc == 2 && !strcmp(argv[1], "--swap-ends")) { swap_ends = 1; argc--; } else if (argc == 3 && !strcmp(argv[2], "--swap-ends")) { swap_ends = 1; argc--; } if (swap_ends) { puts("*** making data file with swapped endianness"); } if (argc > 1) { sprintf(datpath, "%s/%s", argv[1], datfile); } else { strcpy(datpath, datfile); } fdat = fopen(datpath, "r"); if (fdat == NULL) { fprintf(stderr, "Couldn't open %s\n", datfile); exit(EXIT_FAILURE); } fbin = fopen(binfile, "wb"); if (fbin == NULL) { fprintf(stderr, "Couldn't open %s\n", binfile); exit(EXIT_FAILURE); } while (fscanf(fdat, "%lf", &xx) == 1) { x = xx; if (swap_ends) { reverse_float(x); } fwrite(&x, sizeof x, 1, fbin); } fclose(fbin); fclose(fdat); return 0; }