mit putc nur 8 bit möglich?

Gast #807367
hallo zusammen,

ich versuche mit putc() eine int16 variable zu versenden, empfange aber 
auf der anderen seite (serialwatcher) nur werte zwischen 0 und 255.

kann ich mit putc überhaupt mehr als 8 bit auf einmal senden???

falls das nicht geht:
das man strings in int wandeln kann, habe ich schon rausgefunden. 
funktioniert das auch anders rum?
wenn ich "580" versenden will, könnte ich die zahl in nen string 
verwandeln, als string schicken, und auf der anderen seite wieder in ne 
zahl wandeln....
Anfänger wrote:
> hallo zusammen,
>
> ich versuche mit putc() eine int16 variable zu versenden, empfange aber
> auf der anderen seite (serialwatcher) nur werte zwischen 0 und 255.
>
> kann ich mit putc überhaupt mehr als 8 bit auf einmal senden???

Nein.
Aber niemand hindert dich daran, die 16 Bit auf 2 Stück 8 Bit
aufzuteilen und dann die beiden Bytes nacheinander zu versenden.

> falls das nicht geht:
> das man strings in int wandeln kann, habe ich schon rausgefunden.
> funktioniert das auch anders rum?

Klar. Warum sollte es nicht.

> wenn ich "580" versenden will, könnte ich die zahl in nen string
> verwandeln, als string schicken, und auf der anderen seite wieder in ne
> zahl wandeln....

Das ist gar keine so schlechte Idee.
Denn: In welcher Reihenfolge verschickst du denn in obigen Vorschlag
die Bytes? Zuerst das Low-byte und dann das High-Byte, oder anders
rum. Solange du mit dir selbst einig bist, welche Reihenfolge
du verschickst und die Empfangsseite kontrollieren kannst, so dass
du die Teile wieder richtig zusammensetzt, ist das kein großes
Problem. Aber wehe, wenn nicht. Dazu kommt, dass man dann auch noch
sowas wie eine Synchronisierung benötigt. Denn wenn du dich
in den Bytestrom einklinkst und zu Lesen anfängst, woher weist
du denn welches Byte das High-byte und welches das Low-Byte ist?

Mit Strings umgeht man allerdings diese Problematik mit einem
lachenden und einem weinenden Auge.
Lachend deshalb, weil man dadurch unabhängig von der Bytereihenfolge
wird. Der Empfang unterscheidet sich in nichts von dem Fall,
dass am anderen Ende ein menschlicher Benutzer sitzt und die
Werte in ein Terminal eingibt. Dadurch wird zb. auch die
Programmentwicklung vereinfacht, weil Sender und Empfänger
sehr viel einfacher unabhängig voneinander entwickelt werden können.
Ausserdem lässt sich das Synchronisierproblem sehr viel naheliegender
lösen, weil du neben den 10 Ziffern-zeichen noch jede Menge anderer
Zeichen zur verfügung hast, die du als "Start" und "Ende" Zeichen
misbrauchen kannst.

Weinendes Auge deshalb, weil die reine Übertragungszeit dadurch
etwas höher wird.
Gast
für all die, die es interessieren sollte:

das ganze habe ich einfach durch den printf befehl erledigt.
einfacher geht es kaum. so muß keine variable geändert werden.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.