Форум: "Начинающим";
Текущий архив: 2008.04.20;
Скачать: [xml.tar.bz2];
ВнизПомогите раскрыть двоичный файл Найти похожие ветки
← →
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Ե] 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 годом…
← →
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]> а зачем лишняя переменная?
Старый код (года два ему точно), когда-то написал с подсказки (как бы не тебя :) )… Знаю что можно, но переписывать нехочу…
Да и функцией надо сделать…
← →
Германн © (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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.051 c