Supportforum von www.raeppel.de http://www.raeppel.de/phpBB3/ |
|
seriell empfangene CHAR -> REAL http://www.raeppel.de/phpBB3/viewtopic.php?f=12&t=215 |
Seite 1 von 1 |
Autor: | nils [ 05.06.2008, 19:15 ] |
Betreff des Beitrags: | seriell empfangene CHAR -> REAL |
Schönen guten Abend! Ich empfange per seriellem CP eine CHAR-Kette und muss diese in eine REAL wandeln und weiterverarbeiten. Wie geht man da vor? Nils |
Autor: | easytex [ 06.06.2008, 08:28 ] |
Betreff des Beitrags: | |
Hallo nils, zunächst muss man erstmal folgendes wissen: Zitat: char '0' entspricht Hexadezimal 30
char '1' entspricht Hexadezimal 31 ... ... char '9' entspricht Hexadezimal 39 Daraus ergibt sich in etwa folgende Herangehensweise: In diesem Beispiel gehe ich von einer 4 Stelligen Zeichenkette aus, kann man ja beliebig erweitern wenn man mehr braucht. Code: //erste Stelle von links wandeln
L #char1 BTI //in Integer wandeln L 30 //30 subtrahieren um die korrekte Ziffer als Int zu erhalten -I L 1000 //multiplizere mit 1000 *I T #tausender //Zwischenergebnis (Word) //zweite Stelle von links wandeln L #char2 BTI //in Integer wandeln L 30 //30 subtrahieren um die korrekte Ziffer als Int zu erhalten -I L 100 //multiplizere mit 100 *I T #hunderter //Zwischenergebnis (Word) //dritte Stelle von links wandeln L #char3 BTI //in Integer wandeln L 30 //30 subtrahieren um die korrekte Ziffer als Int zu erhalten -I L 10 //multiplizere mit 10 *I T #zehner //Zwischenergebnis (Word) //vierte Stelle von links wandeln L #char4 BTI //in Integer wandeln L 30 //30 subtrahieren um die korrekte Ziffer als Int zu erhalten -I T #einer //Zwischenergebnis (Word) //das Ganze zusammenrechnen L #tausender L #hunderter +I L #zehner +I L #einer +I T #int_zahl //Die Zeichenkette als Integerzahl //Dieses nun in Real wandeln L #int_zahl ITD DTR T #real_zahl //Das Endergebnis als Gleitkommazahl . . |
Autor: | smart_chris [ 08.06.2008, 11:53 ] |
Betreff des Beitrags: | |
besser kann man es nicht erklären! Ich bin aber der Meinung das man auch den Wert von Null einfach mit '0' laden kann und abziehen kann. Wer das ganze auch noch mit Dez Zahlen machen will dem sei gesgat das die '0' = dez 48 entspricht. MFG Chris |
Autor: | ARaeppel [ 08.06.2008, 15:23 ] |
Betreff des Beitrags: | Wandlung |
Hallo, strukturell find ichs ok. Aber wieso das BTI für die Zeichen? Es sind doch noch gar keine Zahlen. Wie schon Chris geschrieben hat: L #char_x L W#16#30 // '0' subtrahieren um die korrekte Ziffer als Int zu erhalten -I André |
Autor: | easytex [ 09.06.2008, 11:12 ] |
Betreff des Beitrags: | Stimmt |
Hallo, Ihr habt recht! Das 'BTI' ist überflüssig. Gruß easytex |
Autor: | Stefan4u2 [ 31.07.2008, 08:56 ] |
Betreff des Beitrags: | Re: seriell empfangene CHAR -> REAL |
Hallo, bin evtl. ein bisschen spät dran, aber ich habe eine Funktion, die aus einem 10-stelligen char-array in eine Gleitkommazahl wandelt, wobei egal ist, wo der Dezimalpunkt steht. Code: FUNCTION "CHARtoREAL" : REAL TITLE = AUTHOR : SKSE FAMILY : convert NAME : CHTORE VERSION : 0.2 VAR_INPUT str : ARRAY [1 .. 10 ] OF CHAR ; END_VAR VAR_TEMP tstr : STRING [10 ]; Multiplikator : REAL ; Divisor : REAL ; Realausgabe : REAL ; RetVal : INT ; END_VAR Bei interesse, schicke ich euch die AWL-Quelle Gruß Stefan |
Autor: | ARaeppel [ 02.08.2008, 10:07 ] |
Betreff des Beitrags: | Re: seriell empfangene CHAR -> REAL |
Hallo Stefan, stells doch in Downloadbereich. André |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |