![]() |
Char nach BCD konvertieren?
Hallo,
Wie in einem Thread weiter unten schon erwähnt lese ich Daten aus meiner Wetterstation über RS232 aus. Ich bekomme von meiner Wetterstation 6 Byte in denen Werte im BCD Format vorliegen. Diese 6 Byte lese ich in ein array of Char weil mit Async Pro die Methode GetChar zur Verfügung stellt. Wie kann ich denn nun die einzelnen Chars konvertieren? Muss ich die nicht von Char nach BCD und von BCD nach Integer konvertieren? Es muss eine Zahl am Ende rauskommen. So sieht mein Code aus. Es sollen 6 Byte zurückkommen aus denen sich uhrzeit und Datum dastellen lassen;
Code:
Hat jemand eine Idee?
procedure TForm1.ComPortTriggerAvail(CP: TObject; Count: Word);
var i, j, Temp: Integer; test: array of Char; begin SetLength(Test,Count); for i := 1 to count do test[i - 1] := ComPort.GetChar; for j := 0 to length(test) - 1 do begin Temp := BCDToInteger(StrToBcd(Test[j]), True); // <----Hier kommt der Fehler direkt beim ersten Durchlauf der Schleife: List.Add(IntToStr(Temp)); // ... ist kein gültiger BCD-Wert! ...ist ein kleines Viereck, end; // also ein nicht druckbares Zeichen denke ich List.SaveToFile(ExtractFilePath(ParamStr(0))+ 'temp.txt'); end; Vielen Dank Dragi |
Re: Char nach BCD konvertieren?
BCD heisst das in jedem Byte zwei Dezimalziffern untergebracht sind.
Je vier Bit (ein Nibble) enthalten die Werte 0..9.
Delphi-Quellcode:
Alles ohne Gewaehr, da hier eingetippt.
var
Value: Integer; // Zielwert Source: array [0..5] of Byte; // Beispiel fuer die BCD Bytes I: Integer; begin Value := 0; for I := 0 to 5 do begin Value := Value * 10; // eine Ziffer links schieben // oberes Nibble rausknipsen Value := Value + Integer((Source[I] shr 4) and $F); Value := Value * 10; // eine Ziffer links schieben // unteres Nibble rausknipsen Value := Value + Integer(Source[I] and $F); end; end; Es kann auch sein das du die Ziffern in umgekehrter Reihenfolge bekommst. Das muss man aus der Doku lesen oder ausprobieren. |
Re: Char nach BCD konvertieren?
Vielen Dank für den Code. Werde den ausprobieren sobald ich die Verbindung über RS232 hinkriege...aber das steht in einem anderen Thread :)
Gruss Dragi |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz