-         

Ergebnis 1 bis 6 von 6

Thema: Zeiger(Pointer) verarbeiten bzw. umwandeln

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    01.09.2005
    Beiträge
    6

    Zeiger(Pointer) verarbeiten bzw. umwandeln

    Anzeige

    Hallo,

    ich bisher hier bisher noch nix gepostet da ich bisher alles mit der Suchfunktion oder google lösen konnte aber dieses mal nicht.

    Problem:
    ich habe ein Ethernut board und habe dort erfolgreich Uip 0.90 zum laufen bekommen. Selbst auf dem Port 1000 werden IP packete emfangen oder Gesendet. Und da ist auch schon das Problem.
    Wenn ich daten von ein PHP Script sende kommen die Daten auch richtig an und werden auf dem Ethernut im ram gespeichert. und mit pointer uip_appdata zur verfügung gestellt.

    wenn ich folgenden code drauf packe werden die Daten auf PORT 1000 gelauscht und gleich wieder zurück gesendet.
    Code:
    #include "app.h"
    void serial_init(void)
    {
    	uip_listen(HTONS(1000));
    }
    void serial_app(void)
    {
    	if(uip_newdata() || uip_rexmit())
    	{ 
     			
        			uip_send(uip_appdata,uip_len);
        					
    	}
    }
    Ich möchte aber gerne die Daten von uip_appdata in einer IF oder switch anweisung behandeln. was aber egal wie nicht so richtig geklappt hat.

    ich habe volgendes bereits probiert.
    Code:
    int data = *uip_appdata
    if(*uip_appdata == "aufgabe1"){...
    if(uip_appdata == "aufgabe1"){...
    etc...
    könntet Ihr mit bitte helfen? Ich bin für alles offen.

    PS: Sorry wegen mein Deutsch aber ich bin nicht von hier.

    Danke und schönen Abend noch

    MfG
    Gamebeast

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Es kommt etwas darauf an, wie uip_appdata definiert ist. Wenn das wirklich eine Adresse (Pointer) auf einen Input-String ist , also
    char* uip_appdata;
    dann vergleichst du:
    if (strcmp(uip_appdata, "aufgabe1") == 0) // EQUAL
    Wobei du aufpassen musst auf Groß- Kleinschreibung, das muß genau passen.

    "strcmp()" ist irgendwo in den normalen includes dabei (string.h ?),
    das merk ich mir nie.


    EDIT: wenn der Input-String NICHT mit \0 abegeschlossen ist, mußt du
    if (strncmp(uip_appdata, "aufgabe1", 8) == 0) // EQUAL
    also mit Länge vergleichen
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    50
    Beiträge
    1.195
    Ergänzung: Besser ist strncmp(uip_appdata, "aufgabe1", uip_len), da dort nur so viele Zeichen verglichen werden, wie der Puffer maximal lang ist. Wenn "aufgabe1" länger sein sollte als der Puffer ist sonst das Ergebnis nicht vorhersagbar.

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    01.09.2005
    Beiträge
    6
    Danke hat super geklappt.

    in der <string.h> zufinden ^^
    Code:
     			if (strncmp(uip_appdata, "aufgabe1", uip_len) == 0){
     				uip_send("richtig",7);
     			}else{
     				uip_send("falsch",5);
     			}
    Danke habt mir sehr geholfen

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Nein, wenn "aufgabe1" länger ist als der Puffer, ist das Ergebnis nicht undefiniert, sondern die Strings sind ungleich (ist nur ein Vergleich, kein strcpy!). Wenn das Stringende 0 fehlt muss natürlich strncmp genommen werden.

    Wenn sich der String nicht ändert, kannst du ihn im Flash lassen und musst nicht SRAM und Flash belegen:
    Code:
    #include <avr/pgmspace.h>
    
       if (0 == strncmp_P (uip_appdata, "aufgabe1", uip_len))
       {
           // mach was bei Gleichheit der ersten uip_len Zeichen
       }
    
       if (0 == strcmp_P (uip_appdata, "aufgabe1"))
       {
           // mach was bei Gleichheit
       }
    Disclaimer: none. Sue me.

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    50
    Beiträge
    1.195
    Vorsicht, wenn uip_appdata nur 3 Zeichen lang ist und dort "auf" steht, hinter dem Puffer aber "gabe1\0" steht, sind die Strings in Deinem Fall gleich, obwohl eigentlich ungleich heraus kommen müsste. Ist zugegebenermassen ein pathologischer Fall, aber die Wahrscheinlichkeit ist != 0, insbesondere, wenn vorher strcpy statt strncpy verwendet wurde. An keiner Stelle ist gesagt, dass der Puffer einen 0-terminierten String enthält.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •