! This file: ! http://ftp.aset.psu.edu/pub/ger/fortran/hdk/ReverseEndian.f90 ! ! Convert a a file with integers/reals to ! the opposite endian by reversing bytes. program ReverseEndian implicit none integer :: j, k integer, parameter :: NumberOfRecords=5 integer, parameter :: n=3 ! n = WordsPerRecord. character (Len=4) :: EndianIn(n), EndianOut(n) integer, parameter :: RecLen=len(EndianIn)*n ! in bytes ! Assume records are Binary, so use Direct access. open (unit=50,file='Data.inp',status='old', & access='direct', form='unformatted', recl=RecLen) open (unit=60,file='Data.out', & access='direct', form='unformatted', recl=RecLen) do k=1,NumberOfRecords read(50,rec=k) EndianIn ! Reverse the bytes (convert Endian byte order) FORALL(j = 1:n) EndianOut(j)(4:4)=EndianIn(j)(1:1) FORALL(j = 1:n) EndianOut(j)(1:1)=EndianIn(j)(4:4) FORALL(j = 1:n) EndianOut(j)(3:3)=EndianIn(j)(2:2) FORALL(j = 1:n) EndianOut(j)(2:2)=EndianIn(j)(3:3) write(60,rec=k) EndianOut end do close(50) close(60) end program ReverseEndian