Я прочитал неформатированный двоичный файл контрольных точек с помощью fortran, и мне нужно проверить значения на их достоверность.Весь смысл контрольной точки состоит в том, что произошел некоторый сбой, и сам файл контрольной точки мог быть поврежден (например, если сбой произошел во время записи файла).
Итак, мой вопрос: существует ли стандартная процедура дляпроверьте, правильно ли логические значения, считанные из файла, были сохранены как логические значения.
Короткий тест с записью любого числа вместо логического и чтением его дал мне .false.значение.Я предполагаю, что каждое читаемое число будет преобразовано в соответствии с правилом, подобным C: nr == 0 ->. False.nr! = 0 -> .true .. Это, однако, не помогает мне понять, правильно ли была написана логика.
Что я могу себе представить, так это читать значение как целое число (или какое-то двоичное значение?)сначала и проверяя, являются ли они 0 или 1, указывая на правильное написание логического.
Пример:
write_test.f90:
program write_test
logical,parameter :: bool=.true.
real*8,parameter :: r=5e20
open(unit=10,form='unformatted')
write(10)bool,r
close(10)
end program
read_test.f90:
program read_test
logical :: bool1
logical :: bool2
open(unit=10,form='unformatted')
read(10)bool1,bool2
write(*,*)bool1,bool2
end program
Вывод read_test.f90:
T F
bool2
выглядит так, как если бы это была хорошая логика со значением .false., Но оно было сохранено как действительное,которого я хотел бы избежать, равно как и всех других типов данных, которые могут быть там выброшены.
По-видимому, он также не использует .true.для значений, отличных от 0. Я предполагаю, что ведущий бит реального, который хранится там, равен 0, и он только читает этот единственный бит.