Hmm, statt nem char-Pointer n char-Array benutzen.
Und atoi lässt sich sehr einfach selbst programmieren.
Hallo,
ich habe diese C-Funktion:
Leider funktioniert das so mit Compact-C nicht. Es gibt einige Syntaxfehler. Z.B. mag der die Pointer überhaupt nicht. Auch die Funktion "atoi" kennt er nicht.Code:#define MAX_PARAMS 6 int params[MAX_PARAMS]; int cmdsplit(char*cmd_string) { int cursor = 0; int param_nr = 0; // Parameterarray initialisieren for (int i=0;i<MAX_PARAMS;i++) params[i] = -1; /* Prüfen ob der command-string gültig beginnt */ if ((cmd_string == NULL) || (cmd_string[cursor] != '#')) return -1; while (cmd_string[cursor] != '\0' && cmd_string[cursor] != '*') // prüfen ob das ende erreicht wurde { char *tmp; cursor++; tmp = (cmd_string + cursor); // tmp wird auf den anfang des für atoi auszulesenden werts "gesetzt" params[param_nr] = atoi(tmp); // wert auslesen if (param_nr >= MAX_PARAMS) // sind mehr parameter verfügbar als erwartet? Stimmt was mit dem Commando nicht... return -1; param_nr++; // Überspingen der ausgelesen Zeichen und ermitteln des nächsten "interessanten" Teils im string. while((cmd_string[cursor] != ':') && (cmd_string[cursor] != '*') && (cmd_string[cursor] != '\0')) cursor++; } return param_nr; }
Kann mir jemand helfen, das zu übersetzen?
Hmm, statt nem char-Pointer n char-Array benutzen.
Und atoi lässt sich sehr einfach selbst programmieren.
Okay, nur ehrlich gesagt habe ich nicht die geringste Ahnung von C-Programmieren... Mein Gebiet ist eher .NET/C#. Kann mir dewegen vielleicht jemand verraten wie man atoi selbst schreibt?
Glaub ich nich...Mein Gebiet ist eher .NET/C#
Das hat doch mit der Sprache nichts zu tun!
Du nimmst den ASCII Wert von array[1] subtrahierst den um den Wert in der ASCII Tabelle um auf den Wert der Ziffer zu kommen und addierst ihn zu der Interger Variable, dann nimmst du array[2] multiplizierst ihn mit 10 und addierst ihn zu der Integer Variable, dann nimmst du array[3]....
Fertig.
Doch es hat schon was mit der Sprache zu tun. Unter .Net muss man sich mit sachen wie atoi, pointer oder der Dastellung von strings als char arrays relativ wenig rumschlagen.
Danke schön Das werde ich dann wohl noch hinbekommen =)Zitat von Del
Richtig. Unter .NET hast du alles lästige was man bei C/C++ noch selbst machen muss entweder automatisiert oder eben sehr vereinfacht. Pointer z.B. tauchen normalerweise bei .NET überhaupt nicht auf.Zitat von shedepe
Nicht ganz richtig.Richtig. Unter .NET hast du alles lästige was man bei C/C++ noch selbst machen muss entweder automatisiert oder eben sehr vereinfacht. Pointer z.B. tauchen normalerweise bei .NET überhaupt nicht auf.
C++ bietet auch sehr viel damit man sich um sowas nciht kümmern muss.
Aber wie man jetzt gesehen hat fehlen durch diese "einfachen Sprachen" wichtige Grundlagen. Klar könnte man sagen das man es in diesen ganzen .NET Sprachen nicht mehr braucht, aber man kommt immer wieder an einen Punkt wo es halt doch nötig ist.
Auf der M32 gab es die Funktion "getBufferLength()". Damit konnte man prüfen, ob auf der UART-Schnittstelle Daten warten. Gibt es diese auch bei der M128?
Die Funktion StrLen kennt er auch nicht... Gibt es dazu was passendes?
Streiche StrLen, setzte Str_Len. Das funktioniert. Sieht zwar einfach aus, aber auch auf sowas muss man erstmal kommen.
P.S: Das war jetzt NULL böse gemeint
Lesezeichen