I am reading a binary phase space file (* .egsphsp #), for simulations monteCarlo with EGSnrc.
My problem is in the file header. The floating variables read them in 1 byte with fread, however, the characters are read in 2 bytes, which causes problems when I generate my own phase space file, since fwrite writes the characters in 1 byte and as double.
Part of my codes:
READ
fprintf ('Reading phase space file ... \ n') MODE_RW = setstr (fread (fid, 5, 'uchar')) '; % Mode NPPHSP = fread (fid, 1, 'int32'); %
NPHOTPHSP = fread (fid, 1, 'int32'); % EKMAXPHSP = fread (fid, 1, 'float32'); % EKMINPHSP = fread (fid, 1, 'float32'); % NINCPPHSP = fread (fid, 1, 'float32'); % Header_File = struct ('Mode', MODE_RW, 'total_particles', ... NPPHSP,' total_photons', NPHOTPHSP, Max_energy ', ... EKMAXPHSP,' Min_energy ', EKMINPHSP, ...' particles_source ', NINCPPHSP);
WRITE
MODE_RW = Header_File.Mode; NPPHSP = Header_File.total_particles; NPHOTPHSP = Header_File.total_photons; EKMAXPHSP = Header_File.Max_energy; EKMINPHSP = Header_File.Min_energy; NINCPPHSP = Header_File.particles_source; fid_w = fopen ('prueba.egsphsp1', 'wb'); g = 1; if g == 0% zlast
a = fwrite (fid_w ,MODE_RW, 'uchar'); b = fwrite (fid_w, NPPHSP, 'int32'); c = fwrite (fid_w, NPHOTPHSP, 'int32'); d = fwrite (fid_w, EKMAXPHSP, 'float32'); e = fwrite (fid_w, EKMINPHSP, 'float32'); f = fwrite (fid_w, NINCPPHSP, 'float32'); . . .
'a' and 'MODE_RW' are not of the same class and have different bytes.
I need to read five characters in 5 bytes (1 byte / char). How do I do it?
Best Answer