Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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&#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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.051 c
15-1203501625
www
2008-02-20 13:00
2008.04.20
как в убунте расшарить папку


2-1206701658
Ramzes001
2008-03-28 13:54
2008.04.20
Ошибка


2-1206598545
Миша
2008-03-27 09:15
2008.04.20
Отправить файл на E-Mail


2-1206706569
oleg_teacher
2008-03-28 15:16
2008.04.20
помогите с кодировкой


2-1206563385
vromav
2008-03-26 23:29
2008.04.20
Преобразование типов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский