Wo ist mein Denkfehler ?

OP #2133307
Lesenswert?
• ▲
▼
Hallo,

ich lese über RS232 einen String ein *1200, dann wandle ich in int um
1
ext_offset=((rx_buffer[1]-48)*1000) + ((rx_buffer[2]-48)*100)
2
        + ((rx_buffer[3]-48)*10) + ((rx_buffer[4]-48)*1) ;  // ASCII in Int wandeln

Meine Variable hat dann aber nur den Wert 1152, also 48 zu wenig,
wo ist der Denkfehler ?

Gruß
Christian
#2133310
Lesenswert?
• ▲
▼
Christian St. schrieb:
> Hallo,
>
> ich lese über RS232 einen String ein *1200, dann wandle ich in int um
>
1
ext_offset=((rx_buffer[1]-48)*1000) + ((rx_buffer[2]-48)*100)
2
>         + ((rx_buffer[3]-48)*10) + ((rx_buffer[4]-48)*1) ;  // ASCII in
3
> Int wandeln
>
> Meine Variable hat dann aber nur den Wert 1152, also 48 zu wenig,
> wo ist der Denkfehler ?

Nirgends.
Du hättest auch atoi nehmen können, aber das ist ein anderes Thema.

Ist sichergestellt, dass du auch tatsächlich den String "*1200" 
empfängst? Hast du das kontrolliert? Die Antwort "Ja, weil ich den 
Sendecode kenne" lasse ich dabei nicht gelten. Hast du dir den String, 
so wie er empfangen wurde, ausgeben lassen?
Woher weißt du, dass die Berechnung 1152 ergibt?
#2133365
Lesenswert?
• ▲
▼
Christian St. schrieb:

> da sitzt man manchmal davor wie blöd......

Die Lektion lautet:

In der Kette

  Eingabe - Verarbeitung - Ausgabe

kann der Fehler überall sein.
Also überprüft man zuerst das was am einfachsten geht: die Eingabe.

Denn wenn ein Verfahren schon mit falschen Daten gefüttert wird, kann 
hinten nichts richtiges mehr rauskommen.

Während der Entwicklung nichts als korrekt annehmen, solange man sich 
nicht davon überzeugt hat. Das betrifft auch Daten, die von extern 
eingespeist werden.
OP #2133384
Lesenswert?
• ▲
▼
tja, manchmal verrennt man sich :-)

mit ein Problem war HTerm, da gibt man erst die Zeichenkette an und 
sendet
mit Return. HTerm funzt auch nicht wirklich unter Win7

Hab ne alte Kiste mit winn2000 und Hyperterminal rausgekramt und da wird
jedes Zeichen sofort gesendet, dadurch ist mir augefallen das nach dem 4 
Zeichen schon das <OK> von meinen System kam.

Gibt es für Win7 überhaupt ein gescheites Terminalprogramm ?

Hab schon hier im Forum und bei Google gesucht, aber nix brauchbares 
gefunden

HTerm mochte ich geht aber unter win7 nur machmal im 
Kompatibilitätsmodus
und schmiert des öfteren ab, blockiert sich selbst den ComPort.
#2133390
Lesenswert?
• ▲
▼
Christian St. schrieb:

> Hab ne alte Kiste mit winn2000 und Hyperterminal rausgekramt und da wird
> jedes Zeichen sofort gesendet, dadurch ist mir augefallen das nach dem 4
> Zeichen schon das <OK> von meinen System kam.

Drum macht man solche Sachen auch selten mit fixen Zeichenzahlen.
ASCII Übertragung funktioniert am besten, wenn weder Sender noch 
Empfänger auf irgendwelche Zeichenzahlen aufpassen müssen.
Ein Weg dazu ist zb das abschliessen einer Eingabe mit "Return" (\n)

Der Empfänger fügt so lange eine weitere Stelle zur Zahl hinzu, solange 
er Ziffern in der Eingabe sieht. Kommt der Return, dann ist die Eingabe 
fertig. Getreu dem Motto

  while( isDigit( nextCharacter ) ) {
    Zahl = 10 * Zahl + nextCharacter - '0';
    receive next Character
  }

(wie auch immer dann der Teil receive next Character auch aussieht)

Mit solch fix vorgeschriebenen Zeichenzahlen schiesst man sich gerne 
selber mal ins Knie, ohne etwas dafür zu kriegen.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.