Newsgroup: it.comp.lang.delphi
Titolo: Conversione IEEE to String

c'è nessuno che sa una funzione per convertire
il formato IEEEE in STRINGA ???
Grazie del aiuto!
Dany

>
c'è nessuno che sa una funzione per convertire
il formato IEEEE in STRINGA ???
<<
Se con IEEE intendi un numero in virgola mobile penso che dovresti:
a) convertirlo in un numero in virgola mobile Pascal (real o single o
extended)
b) usare una delle funzioni di conversione come FloatToStr, FloatToStrF,
Format o FormatFloat.
tra l'altro, penso che il destinatario migliore sia il tipo single (se
non sbaglio ha la stessa dimensione)
hth
Paolo Arosio

 wrote in message
8lk19p$4mr1i$3...@ID-30644.news.cis.dfn.de...
| DINO XYZ
| >>
| c'č nessuno che sa una funzione per convertire


>
type
My_real = Array [1..4] of Byte;
Function Ms_to_Ie(Var ms) : Real;
  Var
    r    : Real;
    ie : Array [1..6] of Byte Absolute r;
    m    : My_real Absolute ms;
begin
  FillChar(r, sizeof(r), 0);
  ie[1] := m[4];
  ie[4] := m[1];
  ie[5] := m[2];
  ie[6] := m[3];
  Ms_to_ie := r;
end;
però non capisco come fare l'inverso........
Ho provato con FloatToStr, FloatToStrF,
Format o FormatFloat. ma con questo non funziona!!!!
almeno per i dati che detengo io, in quanto li devo convertire
in un formato STRINGA.
<<
Non capisco cosa tu intenda per "l'inverso".
IEEE occupa 4 byte con il seguente significato:
-Byte  4-|-Byte  3-|-Byte  2-|-Byte  1-|
seee eeee|emmm mmmm|mmmm mmmm|mmmm mmmm|
dove:
  m...m sono i 23 bit meno significativi della mantissa normalizzata (il
+ significativo si assume sia = 1).
  e...e è l'esponente (biased by 7F hex)
  s è il bit di segno (1 = negativo)
per calcolare il valore v. esempio:
-Byte  4-|-Byte  3-|-Byte  2-|-Byte  1-|
seee eeee|emmm mmmm|mmmm mmmm|mmmm mmmm|
0100 0001 0000 1011 0010 0110 0111 0010
 |--------||--------------------------|
  e=82hex         m = 0B 26 72 hex
Exp = 82 hex - 7F hex = 3
Mant = 2^0 (implicito) + 2^-4 + 2^-6 + 2^-7 + 2^-10 + 2^-13 + 2^-17 +
2^-18 + 2^-19 + 2^-22
Valore = Mant * 2 ^ Exp = 8.69689
Normalmente l'ordine in cui si presentano i byte è dal meno
significativo al + significativo.
Una volta ottenuto il valore, puoi usare le funzioni citate per ottenere
la rappresentazione in formato stringa.
Prova quanto segue:
procedure TForm1.Button1Click(Sender: TObject);
var
  AsSingle: Single;
  AsBytes: Array[0..3] of byte Absolute AsSingle;
  AsSStr, AsBStr: string;
begin
  AsSingle := StrToFloat(Edit1.Text);        // '8.69689'
  AsSStr := Format('Value entered: %1.7f', [AsSingle]);
  AsBStr := Format('Byte representation: [%.2X][%.2X][%.2X][%.2X]',
    [AsBytes[0], AsBytes[1], AsBytes[2], AsBytes[3]]);
  Label1.Caption := AsSStr + #13#10 + AsBStr;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
  AsInteger: Cardinal;
  AsBytes: Array[0..3] of byte Absolute AsInteger;
  AsSingle: Single Absolute AsInteger;
  AsIStr, AsSStr, AsBStr: string;
begin
  if Edit2.Text[1] <> '$' then
    AsInteger := StrToInt('$'+ Edit2.Text)
  else
    AsInteger := StrToInt(Edit2.Text); // $72260B41; $FFFFFFFF
  AsIStr := Format('AsInteger: %d', [AsInteger]);
  AsSStr := Format('AsSingle: %1.7f', [AsSingle]);
  AsBStr := Format('Byte representation: [%.2X][%.2X][%.2X][%.2X]',
    [AsBytes[0], AsBytes[1], AsBytes[2], AsBytes[3]]);
  Label2.Caption := AsIStr + #13#10 + AsSStr + #13#10 + AsBStr;
end;
da cui: i tuoi IEEE sono dei single (per OP e penso per Borland in
generale).
hth
Paolo Arosio

Ringrazio ora provo......
Dany