Hallo,
für unser Programm muss ich daten aus einem alten DOS-Programm auslesen. Mit Zahlen mache ich das mit folgender Funktion:
Delphi-Quellcode:
function WertToFloat(pData:
String;
var pValue: Double): Boolean;
type
tBA =
packed array [0..SizeOf(Extended)-1]
of byte;
var
Buf1: tBA;
i: integer;
BufR:
packed record
case n: integer
of
0: (BA: tBA);
4: (pad4:
array [1..6]
of byte; sgl: single);
8: (pad8:
array [1..2]
of byte; dbl: double);
10: (ext: extended);
end;
iLen: integer;
sTemp, sHex20, sHex00:
String;
nResult: Extended;
begin
sTemp := '
';
if (Trim(pData) = '
')
then begin
Result := False;
pVAlue := 0;
Exit;
end;
iLen := Length(pData);
for i := iLen
downto 1
do
begin
sTemp := sTemp + IntToHex(Ord(pData[i]), 2);
sHex20 := sHex20 + '
20';
sHex00 := sHex00 + '
00';
end;
if (sTemp = sHex20)
or (sTemp = sHex00)
then
Exit;
sTemp := LowerCase(sTemp);
BufR.n := HexToBin(PChar(sTemp), @Buf1, SizeOf(Buf1));
Buf1[0] := Buf1[0]
xor $80;
nResult := 0;
try
for i := 0
to high(tBA)
do
BufR.BA[high(tBA)-i] := Buf1[i];
case BufR.n
of
4: nResult := BufR.sgl;
8: nResult := BufR.dbl;
10: nResult := BufR.ext;
else
raise Exception.Create('
HexToFloat conversion error');
end;
nResult := nResult * -1;
nResult := RoundCurrency(nResult, 4);
if ABS(nResult) > 9999999999999
then begin
nResult := 0;
end;
pValue := nResult;
except
on e:
Exception do begin
sTemp := '
';
for i:= 1
to Length(pData)
do begin
sTemp := sTemp + IntToHex(ord(pData[i]), 2);
end;
end;
end;
end;
jetzt würde ich das ganze umgekehrt benötigen. Wer kann mir dabei helfen?