www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik int-Werte in Zeichenkette einfügen


Autor: Markus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo an alle!

Die 16-Bit-Integerwerte eines UDP-Headers sollen in eine Zeichenkette
geschrieben werden.

Das tut es auch recht gut. Nur nach dem zweiten int-Wert hört die
Zeichenkette auf.

Das der Code recht seltsam anmutem mag, ligt daran, daß ich damit
experimentiere. ;-/

Warum wird der Header nicht ganz in den char-String geschrieben? Bzw.
wie kann man es eleganter machen?

Danke Markus

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich nochmal!

Ich habe herausgefunden, daß der Speicherwert 0x00 als NUL
interpretiert wird und dann die Übertragung abbricht.

Kann ich davon ausgehen, daß alle Werte richtig gespeichert wurden und
ich den Sting auch als UDP-Header verwenden kann?

Wie kann ich das Problem beseitigen, daß die Übertagung immer bei 0x00
abbricht?

Gruß Markus

Autor: Reiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe den Code nicht näher angesehen, aber..
Strings werden in C eben mit \0 (0x0) beendet.
Das heißt, alle Stringfunktionen terminieren automatisch sobald eine
\0 gefunden wird.
Abhilfe:  Keine Stringfunktionen zum Lesen des Arrays verwenden.
Zum Befüllen des Arrays keine Funktionen der str-klasse verwenden
(strcpy, strcat etc.)

Reiner

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Reiner!

Danke für die Antwort.

Welche Funktionen gibt es, die ich zum Zugriff (lesen/schreiben)
verwenden kann? Ist es möglich, daß man ein Word-Array oder ein
Byte-Array anstelle eines Char-Array's verwendet?

Gruß Markus

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenne Deine 'puts'-Funktion zwar nicht, aber sie lässt anmuten,
daß sie eine sog. Stringfunktion ist, d.h. beim Lesen einer 0
abbricht!

Verwende einfach einen Zähler und 'putc', falls das existiert.
In etwa so:

[..]
    while(ctr < UDP_FRM_LEN)
        putc(UDP_Frame[ctr]);
[..]

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mist hab das Inkrementieren von ctr vergessen!

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Oldbug!

Ich verstehe was du meinst. Meine Frage ist, ob wie im uC der String
aussieht? Dabei kann dein Vorschlag recht hilfreich sein. Werde ihn
gleich mal testen.

Gruß Markus

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi OldBug!

Ich habe das Problem so gelöst:

...
while (i<20)
{
  putchar(UDP_Frame[i]);
  i++;
}
...

Und siehe da! Der String existiert im uC so, wie ich ihn haben will;-)

Danke!!!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.