Einzelnen Beitrag anzeigen

Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

Re: BCD Wert Umwandeln in Double oder Extended

  Alt 5. Aug 2009, 16:30
Hallo Marco,

im Prinzip sollte das so gehen:

x'12 34 56 78' das wären 4 Byte mit bcd-Ziffern
entsprechend
Delphi-Quellcode:
 
bcdarray = array [1..4] of byte;
ergebnis = cardinal;
 
ergebnis:= bcdarray[4] and $f;
ergebnis:=ergebnis+((bcdarray[4] shr 4) * 10);
ergebnis:=ergebnis+( bcdarray[3] and $f)* 100);
ergebnis:=ergebnis+((bcdarray[3] shr 4) * 1000);
ergebnis:=ergebnis+( bcdarray[2] and $f)* 10000);
ergebnis:=ergebnis+((bcdarray[2] shr 4) * 100000);
ergebnis:=ergebnis+( bcdarray[1] and $f)* 1000000);
ergebnis:=ergebnis+((bcdarray[1] shr 4) *10000000);
Da ich nur 4 Byte große BCDs kenne hab ich das mal als Beispiel genommen.
U16 deutet natürlich auf 16 Bit =2Byte hin und dann kannst Du Dir die Hälfte sparen.

Gruß
K-H

[edit] Ich hab den real-Datentyp übersehen, aber daß ist im Prinzip das Gleiche nur daß man durch 10/100... teilt ist
  Mit Zitat antworten Zitat