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


von Markus (Gast)


Angehängte Dateien:

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

von Markus (Gast)


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

von Reiner (Gast)


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

von Markus (Gast)


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

von OldBug (Gast)


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]);
[..]

von OldBug (Gast)


Lesenswert?

mist hab das Inkrementieren von ctr vergessen!

von Markus (Gast)


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

von Markus (Gast)


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!!!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.