|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
27.01.2007, 13:43 | #1 |
Пользователь
Регистрация: 01.11.2006
Сообщений: 63
|
конвертер
Подскажите пожалуста как работать с бинарными файлами. Буду признателен если вдобавок дадите какие-нибудь ссылки по этой теме. Задача у меня такая: на огневом испытании двигателя ЖРД РН "Ангара" идет запись параметров в бинарный файл (*.dat). Мне надо из этих иероглифов получить реальные числа.
Как это делается я нигде не нашел. Я прикрепил структуру бинарного файла , подскажите, как его конвертировать в обычный текстовый формат? Заранее очень признателен Вам... |
27.01.2007, 16:05 | #2 |
Владимир М.
Участник клуба
Регистрация: 30.10.2006
Сообщений: 1,289
|
реальные испытания?
Берегите друг друга!
|
27.01.2007, 16:36 | #3 |
Пользователь
Регистрация: 01.11.2006
Сообщений: 63
|
а как иначе по вашему отработать двигатель? Про "НПО Энергомаш" надеюсь знаеете?
так как работать с бинарными файлами??? |
10.02.2007, 23:18 | #4 |
Пользователь
Регистрация: 01.11.2006
Сообщений: 63
|
есть бинарный файл (предположительно компрессированный) такого содержания:
Џ* (‡@ @ Ј* (‡@ @ ђ) (‡@ @ написал прогу на Fortran которая преобразует эту последовательность байтов в числа: *********************************** ******************* real*4 r real*8 t(30000), p(30000,100), tb, te integer*4 k(100),i,rr character*3 ts/' t'/ character*7 c(100) open( 5, file = 'tp.bin', recl=1, form='binary', access='direct', & mode='read' ) ! Вход-Файл данных испытаний do i=1,100 read (5,rec=i) r !!! i - порядковый номер байта write(111,'(1x,1pd15.8)') dble(r) enddo ! i end *********************************** ********************** здесь за конвертирование отвечает параметр rec=i процедуры read. Результат работы проги такой: 1.52671468D-41 9.40400189D-38 1.83670992D-40 7.17464814D-43 2.80259693D-45 7.10542736D-15 -1.26389153D-34 *************** *************** и т.д. Вопрос: как мне такое же преобразование сделать средствами Delphi??? неделю бьюсь, ничего не выходит! как надо обращаться к файлу? Помогите плиз..... |
10.02.2007, 23:39 | #5 |
Пользователь
Регистрация: 09.02.2007
Сообщений: 49
|
считывай Blockread-ом в файл, как у тебя показано в *.doc, да и по-моему, тип *.dat это всего лишь бинар без всякого сжатия, т.е. как есть... сорри за тафталогию
Свой среди чужих
Чужой среди своих Последний раз редактировалось Lynx; 10.02.2007 в 23:47. |
11.02.2007, 00:12 | #6 |
Андрей
Форумчанин
Регистрация: 21.11.2006
Сообщений: 457
|
Эх, если бы я хоть чуть-чуть знал Фортран... Напиши что именно должна делать твоя программаю Тогда будет больше шансов что тебе кто то ответит.
ICQ: 5311314
[SIGPIC][/SIGPIC] |
13.02.2007, 00:41 | #7 |
Пользователь
Регистрация: 01.11.2006
Сообщений: 63
|
Прога должна считать (для простоты) 1 байт и конвертировать его в текст. Этот байт имеет тип integer (после конвертирования должно получится 10895)! как это в делфи сделать??
Я прикреплю бинарный файл (точнее его часть, а то много получится). Если кому-то станет интересна данная задачя, или захочет мне помочь, то попробуйте считать первый байт и преобразовать его так чтобы получилось 10895 или дайте направляюшие советы подсказки, буду очень рад всему Последний раз редактировалось malevich; 13.02.2007 в 00:53. Причина: 6456 |
13.02.2007, 01:08 | #8 |
Пользователь
Регистрация: 01.11.2006
Сообщений: 63
|
Последний раз редактировалось malevich; 13.02.2007 в 01:11. |
13.02.2007, 09:06 | #9 |
Delphi/C++/C#
Участник клуба
Регистрация: 29.10.2006
Сообщений: 1,972
|
Мда...
1) Число 10895 - никогда не поместится в 1 байт 2) Запускаем калькулятор, вводим 10895 и преобразуем в 16-ричную систему, получаем 2A8F. 3) Открываем HEX-редактором Ваш файл, смотрим первые 2 байта, они равны... 8F2A - т.е. это то самое число, но записанное обратной записью (байты местами поменяли), вот и всё P.S.: спасибо за отзыв Последний раз редактировалось zetrix; 13.02.2007 в 14:38. |
13.02.2007, 21:29 | #10 |
Пользователь
Регистрация: 01.11.2006
Сообщений: 63
|
как переводить из одной системы исчисления в другую я вроде бы кое-как знаю:
Код HTML:
function DecToBase( Decimal: LongInt; const Base: Byte): String; const Symbols: String[16] = '0123456789ABCDEF'; var scratch: String; remainder: Byte; begin scratch := ''; repeat remainder := Decimal mod Base; // îñòàòîê äåëåíèÿ scratch := Symbols[remainder + 1] + scratch; Decimal := Decimal div Base; until ( Decimal = 0 ); Result := scratch; end; 2. Вопрос конечно ламерский, но всеже дайте совет если я ошибаюсь. В файле есть числа типа REAL, как правило занимают 2байта. Но ведь переводить из одной системы исчисления в другую мы можем только целые числа (выходит при конвертировании они округляются???) куда девался тогда разделитель??? Идея такая: если число занимает 2 байта, то: 1-й байт это целая часть 2-й байт это дробная часть я правильно рассуждаю? Если нет то как тогда отследить разделитель? |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Конвертер из png в jpg или gif или bmp | Квэнди | Мультимедиа в Delphi | 8 | 04.10.2011 22:26 |
Сделать Конвертер | vizor9 | Свободное общение | 11 | 01.10.2009 00:57 |
Конвертер bik => avi | Altera | Софт | 6 | 11.05.2008 15:01 |
конвертер из *.icon в *.bmp | KORT | Свободное общение | 2 | 21.10.2007 22:32 |
конвертер | KORT | Свободное общение | 3 | 27.08.2007 01:47 |