Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.04.20;
Скачать: CL | DM;

Вниз

Помогите раскрыть двоичный файл   Найти похожие ветки 

 
Rus   (2008-03-26 17:08) [0]

В описании файла написано:
смещение  длина  поле
0               3        Дата данных (месяц:день:год)
3               2        Время данных (часы:минуты)
5               4        Расход
9               4        Р2
13              4       Р3
17              4       Р4
21              4       Р5
25              4       Р6
29              4       Р7
33              4       Р8
Все измеряемые величины представлены в формате с плавающей точкой одинарной точности (float).

Все это лежит в файле Hh02011.083 (там одна строка за 17/03/08)

Я читаю файл:
procedure TForm1.Button2Click(Sender: TObject);
begin
fs := TFileStream.Create(ExtractFilePath(Application.ExeName)+"\HCon\"+"Hd02011.083", fmOpenRead);
RichEdit1.Clear;
try
  RecNum := fs.Size div SizeOf(TMyRec);
while RecNum > 0 do
  begin
    fs.ReadBuffer(MyRec, SizeOf(TMyRec));
//   ...
//Дата
ShowMessage(FloatToStr(Myrec.MyDate[0]));получено 3 (3-й месяц)
ShowMessage(FloatToStr(Myrec.MyDate[1]));получено 17 (17-е число)
ShowMessage(FloatToStr(Myrec.MyDate[2]));получено 8 (2008 год)

//Время
ShowMessage(IntToStr(Myrec.MyTime[0]));получено 0 (0 часов)
ShowMessage(IntToStr(Myrec.MyTime[1]));получено 0 (0 минут)

//Расход
ShowMessage(FloatToStr(Myrec.Rashod[0])); 94,336.......
ShowMessage(FloatToStr(Myrec.Rashod[1]));93,067...
ShowMessage(FloatToStr(Myrec.Rashod[2]));1,322....
ShowMessage(FloatToStr(Myrec.Rashod[3]));215,97....
...
...
...

Если с датами получилось, то с расходом что-то не понятное.
Как из этих четырех значений получить одно...
Объясните пожалуста, сделав скидку, что с двоичными файлами ни когда не работал, как получить истинное значение.
Выручайте, кто может ...


 
Сергей М. ©   (2008-03-26 17:13) [1]


> с плавающей точкой одинарной точности


Предположу, что соотв.поля в твоей структуре д.б. объявлены как single


 
Palladin ©   (2008-03-26 17:15) [2]

описание TMyRec мы, конечно, все и так прекрасно знаем...


 
Rus   (2008-03-26 17:20) [3]

TMyRec = packed record
MyDate: array[0..2] of Byte;
MyTime: array[0..1] of Byte;
Rashod: array[0..3] of Single;


 
Сергей М. ©   (2008-03-26 17:24) [4]


> Rus


Приведи содержимое двойного слова, находящегося в поле Расход в hex-формате, соответствующее ему реальное float-значение и значение, полученное тобой


 
Kolan ©   (2008-03-26 17:24) [5]

procedure ConvertBytesToFloat(HighByte1, HighByte2,
 LowByte1, LowByte2: Byte; var Value: Single);
var
 TempArr: array[0&#1333] of Byte;
   TemVal: Single absolute TempArr;
begin
 TemVal := 0;
 TempArr[0] := HighByte1;
 TempArr[1] := HighByte2;
 TempArr[2] := LowByte1;
 TempArr[3] := LowByte2;
 Value := TemVal;
end;


?


 
Rus   (2008-03-26 17:53) [6]

Спасибо Kolan Работает!


 
Kolan ©   (2008-03-26 17:56) [7]

> array[0?] of Byte

array[0..3] of Byte


 
Kolan ©   (2008-03-26 17:58) [8]

PS
формат даты наводит дрож :) Интересно что длать с 1998 годом&#133


 
Palladin ©   (2008-03-26 18:00) [9]

а зачем лишняя переменная?

procedure ConvertBytesToFloat(HighByte1, HighByte2,
LowByte1, LowByte2: Byte; var Value: Single);
var
TempArr: array[0..3] of Byte absolute Value;
begin
TempArr[0] := HighByte1;
TempArr[1] := HighByte2;
TempArr[2] := LowByte1;
TempArr[3] := LowByte2;

end;


да и вообще одним singlом обойтись можно...


 
Kolan ©   (2008-03-26 18:06) [10]

> а зачем лишняя переменная?

Старый код (года два ему точно), когда-то написал с подсказки (как бы не тебя :) )&#133 Знаю что можно, но переписывать нехочу&#133

Да и функцией надо сделать&#133


 
Германн ©   (2008-03-26 19:09) [11]


> Kolan ©   (26.03.08 17:58) [8]
>
> PS
> формат даты наводит дрож :) Интересно что длать с 1998 годом…
>

Обычный формат для микросхем RTC.
Этот ещё ничего. А есть такие микросхемы, где год задан числом от 0 до 3.


 
Anatoly Podgoretsky ©   (2008-03-26 21:32) [12]

> Rus  (26.03.2008 17:20:03)  [3]

А измеряемых величин 8, а не 4



Страницы: 1 вся ветка

Текущий архив: 2008.04.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
2-1206621832
Азамат
2008-03-27 15:43
2008.04.20
Обработка событий


15-1204646353
GlFox
2008-03-04 18:59
2008.04.20
Distributed File System


2-1206090533
Dima
2008-03-21 12:08
2008.04.20
Что за бред происходит???


2-1206437419
Armond
2008-03-25 12:30
2008.04.20
MS SQL


2-1206272590
webSQLNeederr
2008-03-23 14:43
2008.04.20
Аналог php функции split в Делфи?