можно ли «расшифровать» файл данных F77_UNFORMATTED (неформатированный IEEE)?

Я портирую какой-то код написал в IDL в C ++, но файл данных находится в F77_UNFORMATTED IEEE-неотформатированная. Я не могу открыть данные напрямую (это очень большой файл), поэтому я наивно попытался сделать что-то вроде:

  std::ifstream results(dataFile);
for ( int i = 0 ; i < 200 ; i++ )
{
std::cout <<" {{"<< results.rdbuf() << "}} " << std::endl;

}

Я получил немного … печати,

B??$B?}B?5?A\?@0\???A?R???=??fdA=-???y?9@AB?N3B,TB???@t?A??!B??BS,??BX??B?l?B[B?]?A?AqB?B?B?C?B1?A2?

Я проверил, скопировав с awk первые 200 строк, и я получил то же самое.

Я хотел бы избежать решения, такого как чтение и сохранение всего из IDL в дружеском формате.

xxd datafile | more возвращает:

0000000: 0080 1700 6d20 10b9 17f0 1c39 d245 24b9  ....m .....9.E$.
0000010: 2535 1b39 251b 39b9 07f7 1939 bba4 4db9  %5.9%.9....9..M.
0000020: f428 1939 dfb7 63b9 7ba2 1a39 f293 7ab9  .(.9..c.{..9..z.
0000030: dc1d 1e39 1b49 89b9 bb53 2139 b3f1 94b9  ...9.I...S!9....
0000040: 7071 2639 a8e2 a0b9 1a02 2a39 79b3 acb9  pq&9......*9y...
0000050: 5092 2f39 b570 b8b9 637f 3539 66d4 c4b9  P./9.p..c.59f...
0000060: 197c 3e39 06f5 cfb9 d6cf 4639 c825 dbb9  .|>9......F9.%..
0000070: 3762 5039 42df e5b9 06e7 5739 3575 efb9  7bP9B.....W95u..
0000080: c885 6039 e6e6 f8b9 fedb 6839 54b4 00ba  ..`9......h9T...
0000090: 2480 7239 bbea 04ba b1b3 7b39 902f 08ba  $.r9......{9./..
00000a0: a388 8239 084c 0bba be67 8639 324c 0dba  ...9.L...g.92L..
00000b0: b020 8b39 844b 0fba 4297 8e39 f38d 10ba  . .9.K..B..9....
00000c0: b6ee 9239 a055 11ba 2e73 9639 640f 11ba  ...9.U...s.9d...
00000d0: ed11 9939 1f33 10ba 97df 9a39 8152 0eba  ...9.3.....9.R..
00000e0: 65de 9c39 863e 0cba b5b0 9e39 3fe2 08ba  e..9.>.....9?...
00000f0: ae9b a039 ac81 05ba 098f a139 81d9 00ba  ...9.......9....
0000100: ae04 a239 b295 f7b9 8f56 a139 315f ecb9  ...9.....V.91_..
0000110: 2c5d a139 b19f e0b9 6f2d a139 5e0e d4b9  ,].9....o-.9^...
0000120: 96e0 a039 f24e c7b9 7b36 a039 cc1d b9b9  ...9.N..{6.9....
0000130: 338d 9e39 33ff aab9 5a4e 9c39 6aa9 9cb9  3..93...ZN.9j...
0000140: 0c3a 9a39 a6b0 8eb9 7760 9839 2bd3 80b9  .:.9....w`.9+...
0000150: 94ae 9539 6ea4 67b9 6c0e 9339 60d0 4cb9  ...9n.g.l..9`.L.
0000160: cda8 8f39 3274 33b9 e11c 8c39 ac0a 1bb9  ...92t3....9....

может быть немного полезной информации:

IDL Программа читает файл данных через for петли,

  for i=0, imax do begin
ReadU, d_file, a
ReadU, d_file, b
ReadU, d_file, c
ReadU, d_file, d
ReadU, d_file, e
ReadU, d_file, f
ReadU, d_file, g
ReadU, d_file, h

.... DO MATHS AND STUFFS ....
endfor

все переменные a в h являются fltarr(sizeX,sizeY,sizeZ) (3D матрица с sixeX = 128, sizeY = 64 и sizeZ = 47). Так что я думаю readU при каждом вызове читает в файле матрицу и присваивает ее соответствующей переменной.

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]