Чтение области памяти и определение типа данных

  • Автор темы _DeMiUrG_
  • Дата начала
Статус
Закрыто для дальнейших ответов.
D

_DeMiUrG_

#1
Я читаю область памяти функцией BlockRead(F,DynArray,sizeof(DynArray))
DynArray обьявляю как массив данных типа Byte

у меня некоторые значения Byte
а некотороые Integer или Float

как перевести значения области памяти Byte
в числа Integer Float ?
 
Z

zubr

#2
Код:
var
i, k:Integer;

begin
k:=0;
For i:=5 to 8 do
k:=k shl 8 +DynArray[i];
end;
 
S

Silver Wind

#3
Для float, например, так можно:
Код:
type
float = single;

floatbyte = record
Case boolean of
True:(f:float);
False:(b:array[0..3] of byte);
end;

function ExtractFloatValue(Buf: array of byte; FromByte: Integer): float;
var fb:floatbyte;
begin
fb.b[0]:=Buf[FromByte+0];
fb.b[1]:=Buf[FromByte+1];
fb.b[2]:=Buf[FromByte+2];
fb.b[3]:=Buf[FromByte+3];
Result:=fb.f;
end;
P.S. Только порядок следования байт в float нужно уточнить, может там перестановка байт нужна 0<->3 и 1<->2.
 
D

_DeMiUrG_

#5
пришел к варианту с функцией CopyMemory
те есть обьявлен DynArray

потом идет считывание из файла

BlockRead(F,DynArray,sizeof(DynArray));


далее я пытаюсь присвоить значения функцией
CopyMemory(@XX,@DynArray,4);
и в этом месте компилятор ругается
чтото на обращение к памяти
что посоветуйте?
 
Статус
Закрыто для дальнейших ответов.