Forum: Mikrocontroller und Digitale Elektronik C library function - strtol()


von Welle 🧐 S. (w3llschmidt)


Lesenswert?

Ich habe das Problem, dass ich einen PWM Wert aus einen char Puffer in 
int
wandeln muss. Soweit kein Problem.

Der Puffer ist der rx_buffer eines UDP Servers.

Mein Problem, wenn der Puffer leer ist, gibt strtol() den Wert 0 zurück.
Damit steht mein PWM Device logischerweise.

1
while(1) {
2
3
   throttle = strtol(rx_buffer, NULL, 10);
4
5
      if (throttle == 0) { 
6
         STOP
7
      }
8
}

Die 0 soll natürlich verarbeitet werden, wenn sie denn über den 
rx_buffer
empfangen wird.

von Teo D. (teoderix)


Lesenswert?

Sollte, könnte.... ne Idee?!
1
while(1) {
2
3
   throttle = strtol(rx_buffer, foo, 10);
4
5
      if ((!throttle) & (&rx_buffer == foo)) 
6
         STOP
7
      }
8
}

von Nop (Gast)


Lesenswert?

W3ll S. schrieb:

> Mein Problem, wenn der Puffer leer ist, gibt strtol() den Wert 0 zurück.
> Damit steht mein PWM Device logischerweise.

Dann frag halt vorher ab, ob er leer ist, indem Du z.B. auf 
(*rx_buffer=='0') prüfst. Oder mit (strlen(rx_buffer)==0).

von Sven P. (Gast)


Lesenswert?

Manpage:

> If  endptr  is  not  NULL,  strtol() stores the address of the first invalid
> character in *endptr.  If there were no digits at all, strtol() stores the
> original value of nptr in *endptr (and returns 0).  In particular, if *nptr is
> not '\0' but **endptr is '\0' on return, the entire string is valid.

Also ja, ungefähr so.

von Nop (Gast)


Lesenswert?

Teo D. schrieb:

> if ((!throttle) & (&rx_buffer == foo))

Erstens gehört in logische Ausdrücke ein &&, kein &, und zweitens, was 
machst Du da mit der Adresse des Bufferpointers?!

von MaWin (Gast)


Lesenswert?

W3ll S. schrieb:
> Mein Problem, wenn der Puffer leer ist, gibt strtol() den Wert 0 zurück

Warum wendet man strtol und das nachfolgende setzen von throttle 
überhaupt auf einen leeren rx_buffer[0]=='\0' buffer an ?
Programmierfehler ? Faulheit ? Die fälschliche Erwartung dass jemand für 
einen schon die Arbeit macht ?

von Dirk B. (dirkb2)


Lesenswert?

Du kannst auch sscanf nehmen und den Rückgabewert auswerten.
Im Fehlerfall wird kein Wert gespeichert.

von Welle 🧐 S. (w3llschmidt)


Lesenswert?

MaWin schrieb:
> Programmierfehler ? Faulheit ? Die fälschliche Erwartung dass jemand für
> einen schon die Arbeit macht ?

Unwissenheit. Aber nun bin ich schlauer! Danke.

von Welle 🧐 S. (w3llschmidt)


Lesenswert?

Dirk B. schrieb:
> Du kannst auch sscanf nehmen und den Rückgabewert auswerten.
> Im Fehlerfall wird kein Wert gespeichert.

Ok, teste ich mal.

von Peter D. (peda)


Lesenswert?

Typisch hat man ein Protokoll implementiert und dieses sagt einem, wann 
ein gültiges Paket vorliegt. Und erst dann wird dieses Paket vom Parser 
ausgewertet.
Daß man auf einem ungültigen Puffer parst, kann also nie vorkommen.

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.