Forum: Compiler & IDEs strtoul-Funktion


von Gast (Gast)


Lesenswert?

Hi zusammen,

ich beginne gerade mit der Programmierung in C Sprache.
Ich benutze die Funktion stroul um einige Parameter zu zuweisen

Z.B. Data[1] = (uint16_t) strtoul(Frame[1],(void*)0,16);

Wenn der Inhalt der Variable Frame[1] außer dem Bereich 0 bis 9 oder A 
bis F liegt, wird den Wert 0 im Data[1] gelegt.
Meine Frage ist: gibt es die Möglichkeit ein andere Wert z.B 20 oder 
anderer Buchstabe z.B v zu definieren, wenn der Inhalt von Frame außer 
dem erlaubten Bereich liegt. Ich meine statt der Wert 0 ein beliebige 
Wert setzen.

danke

von Karl H. (kbuchegg)


Lesenswert?

Gast wrote:
> Meine Frage ist: gibt es die Möglichkeit ein andere Wert z.B 20 oder
> anderer Buchstabe z.B v zu definieren,

Nein, leider nicht.
strtoul und konsorten sind dazu gedacht auch dann benutzbar zu sein, 
wenn die Zahl in einen Textkontext eingebettet ist.

> wenn der Inhalt von Frame außer
> dem erlaubten Bereich liegt. Ich meine statt der Wert 0 ein beliebige
> Wert setzen.

Was du machen kannst:
Wenn sicher gestellt ist, dass dein Eingangsstring nur die Zahl enthält, 
dann muss strtoul den String bis zum Ende geparst haben. Und dakommt 
jetzt das zweite Argument von strtoul ins Spiel.
Dort übergibst du die Adresse eines char Pointers. Ist der String bis 
zum Ende geparst worden, dann muss dieser Pointer nach dem strtoul auf 
ein '\0' Zeichen zeigen. Ansonsten ist irgendetwas schief gegangen
1
  char* endPtr;
2
3
  Data[1] = (uint16_t) strtoul(Frame[1], &endPtr, 16 );
4
  if( *endPtr != '\0' )
5
    // something went wrong

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.