AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein BCD Wert Umwandeln in Double oder Extended
Thema durchsuchen
Ansicht
Themen-Optionen

BCD Wert Umwandeln in Double oder Extended

Ein Thema von SimStar001 · begonnen am 5. Aug 2009 · letzter Beitrag vom 5. Aug 2009
Antwort Antwort
SimStar001

Registriert seit: 18. Jan 2008
594 Beiträge
 
#1

BCD Wert Umwandeln in Double oder Extended

  Alt 5. Aug 2009, 10:40
Hallo, ich habe aus dem Flight Simulator einen Wert im BCD Format Codiert.

Es handelt sich dabei um die COM1 Frequenz.
wie bekomme ich den Wert jetzt in einen Double oder Extended wert?

gibst dafür schon ne Function?

LG Marco
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

Re: BCD Wert Umwandeln in Double oder Extended

  Alt 5. Aug 2009, 13:56
Hallo Marco,

warum machst Du es nicht selbst? offiziell gibt's da nichts (soweit ich weiß).
Aber bist Du Dir sicher? BCD und das Intel-Format vertragen sich nicht so besonders.
Ausserdem ist BCD doch mit den Großrechnern zusammen ausgestorben?

Gruß K-H
  Mit Zitat antworten Zitat
SimStar001

Registriert seit: 18. Jan 2008
594 Beiträge
 
#3

Re: BCD Wert Umwandeln in Double oder Extended

  Alt 5. Aug 2009, 14:37
Also lauft FS Interoagte, welches die Variablen ausließt, ist der inhalt, welcher ausgelesen wird vom Type U16 und als Remark steht folgendes geschrieben:
"Frequency show as BCD (Binary Coded Decimal), however the prefixed "1" is removed" also als anzeige im FS hat man ja dann 121.825 usw. und so muss ich es am Ende auch umwandeln können.

Also wie stell ich das am besten an? ich hatte schon ein paar codes aber die haben nicht das gewünschte ergebnis gebracht!
  Mit Zitat antworten Zitat
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, 15: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
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.252 Beiträge
 
Delphi 12 Athens
 
#5

Re: BCD Wert Umwandeln in Double oder Extended

  Alt 5. Aug 2009, 16:22
welches Delphi hast du denn?
und da schonmal in die OH geschaut, was sich zu BCD finden läßt?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

Re: BCD Wert Umwandeln in Double oder Extended

  Alt 5. Aug 2009, 17:18
in D7 gibt's noch kein BCD
Turbo Delphi (D2006) weiß das es BCDs gibt
einschl. der notwendigen Fuktionen.

Gruß
K-H
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.252 Beiträge
 
Delphi 12 Athens
 
#7

Re: BCD Wert Umwandeln in Double oder Extended

  Alt 5. Aug 2009, 18:15
Zitat von p80286:
in D7 gibt's noch kein BCD
siehe Unit FMTBcd

zum Glück geht vom D7 die "alte" OH noch


aber im Prinzip wurde die Rechenweise schon gesagt, wobei BCD nicht gleich BCD
BCD = Binär CKodierte Dezimalzahl

und da gibt es mehrere Formate, aber meistens meint man wohl wirklich das oben genannte ... also 4 Bit je Dezimalstelle und der Inhalt ganz normal Zweierkomplement
Miniaturansicht angehängter Grafiken
bcd_184.jpg  
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz