Einzelnen Beitrag anzeigen

Thomas Feichtner

Registriert seit: 30. Nov 2007
Ort: Rum
137 Beiträge
 
Delphi 10.4 Sydney
 
#1

Zahl wieder in String umwandeln

  Alt 25. Apr 2013, 09:11
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?
mfg

Thomas Feichtner
  Mit Zitat antworten Zitat