Entwickler-Ecke

Sonstiges (Delphi) - eine dezimalzahl in eine BCD zahl umwandeln


axis - Fr 20.05.05 23:41
Titel: eine dezimalzahl in eine BCD zahl umwandeln
hi leute

ich hab da ein problem ich will eine dezimalzahl in eine BCD Zahl umwandeln und aus geben
also ich will z.B. 239 in 0010 0011 1001 umwandeln und ausgeben aber wie kann ich das machen??????

ich bitte vielmals um hilfe
mfg
axis


Moderiert von user profile iconmatze: Topic aus Neue Einträge / Hinweise / etc. verschoben am So 22.05.2005 um 09:56


JRegier - Sa 21.05.05 00:02
Titel: Re: eine dezimalzahl in eine BCD zahl umwandeln
user profile iconaxis hat folgendes geschrieben:
hi leute

ich hab da ein problem ich will eine dezimalzahl in eine BCD Zahl umwandeln und aus geben
also ich will z.B. 239 in 0010 0011 1001 umwandeln und ausgeben aber wie kann ich das machen??????

ich bitte vielmals um hilfe
mfg
axis


Hallo, ich hab das mal bei meiner Informatik-Ausbildung gelernt ich weiß nicht mehr wie wir das so berechnet hatten ich werd mal nachsehen! Also jede stelle im BCD ist der reihe nach von rechts nach links 2² 1² 0² usw. also zahlen reihen jeweils hoch zwei!
Jetzt weiß ich von Assembler das man mit Shifting die Bits einer Zahl schieben und im
"Carry Flag" glaub ich hieß der jedenfals in einem der Flags prüfen/auslesen ist das eine 0 oder 1;


NeoInDerMATRIX - Sa 21.05.05 00:26

Hi,

also BCD ist nicht binary zahlen format, sondern ein sehr altes format um zahlen zu speichern! Wo bei das auch eigentlich kein richtiges Zahlenformat ist, sondern nur eine art um Zahlen zu übergeben. Zum Beispiel liefert das BIOS beim abfragen der Aktuellen Zeit die Zeit im BCD format zurück.

Im BCD format werden in einem Byte zwei Nibble's gespeichert. Sprich die BCD zahl
$11 entspricht den zwei dezimal zahlen 1, 1!
Das was du meinst ist das binary zahlen system, das ganz einfach gebildet werden kann!


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
Function ByteToBinaryStr(AValue: Byte): String;
Var
    B: PByte;
Begin
    AValue := AValue And $FF;
    Result := StringOfChar('0'8);
    B := @Byte(Result[8]);
    While AValue <> 0 Do
    Begin
        Inc(B^, AValue And 1);
        AValue := AValue Shr 1;
        Dec(B);
    End;
End;

Function WordToBinaryStr(AValue: Word): String;
Var
    B: PByte;
Begin
    AValue := AValue And $FFFF;
    Result := StringOfChar('0'16);
    B := @Byte(Result[16]);
    While AValue <> 0 Do
    Begin
        Inc(B^, AValue And 1);
        AValue := AValue Shr 1;
        Dec(B);
    End;
End;

Function DWordToBinaryStr(AValue: DWORD): String;
Var
    B: PByte;
Begin
    Result := StringOfChar('0'32);
    B := @Byte(Result[32]);
    While AValue <> 0 Do
    Begin
        Inc(B^, AValue And 1);
        AValue := AValue Shr 1;
        Dec(B);
    End;
End;

Omorphia source [http://www.omorphia.de.vu]
OIncProcs.pas (Zeile ca. 1700) [http://cvs.sourceforge.net/viewcvs.py/omorphia/omorphia/library/source/OIncProcs.pas?rev=1.81&view=markup]

Cu
Neo


axis - Sa 21.05.05 20:40

ne ich glaube ich habe meine frage nicht verständlich genug gestellt ich will wissen wie ich die dezimalzahl so einlesen kann damit ich sie als bcd zahl wieder ausgeben kann
z.B.: 287 wie kann ich diese zahl einlesen damit ich sie wieder so ausgeben kann:
0010 1000 0111????

mfg
axis


BenBE - Sa 21.05.05 21:11

Einfachste Möglichkeit:

Zahl --> BCD:

Delphi-Quelltext
1:
BCDConverted := StrToInt('$'+ZahlStr);                    


BCD --> Zahl:

Delphi-Quelltext
1:
ZahlStr := IntToHex(BCDConverted, 1);                    


axis - So 22.05.05 02:06

so und wie soll ich das jetzt in mein programm einordnen ich bin fast ein noob ich weiss nicht wirklich was ich damit anfangen soll
kann mir das bitte mal einer detailierter erklären und einfacher ?????

mfg
axis