Forum: Compiler & IDEs Benutzung von strtoul


von Gast (Gast)


Lesenswert?

Hi,
kann jemanden mir zeigen wie ich ein Char in uint_32 konvertieren kann
#include <stdlib.h>

char zahl1[4]="104";
uint16_t zahl2;
zahl2 = (uint16_t) strtoul(zahl1, (void *) 0, 16);
ich bekomme zahl2 = 104

jetzt ich definiere
uint32_t zahl2;
zahl2 = (uint32_t) strtoul(zahl1, (void *) 0, 32);
ich bekomme zahl2 = 404

von atat (Gast)


Lesenswert?

Tach,

1. Du möchtest ab sofort immer ein funktionierendes Minimal-Beispiel in 
einer Code-Umgebung verwenden. (Ich bin faul...) ;-)
2. Du möchtest nicht char konvertieren sondern ein char-array, also 
einen String!
3. Du möchtest dir die strtoul-Funktion nochmal näher anschauen. Schaue 
hier für [1]. ;-)
4. Der Teil mit uint16_t wird immer eine Warnung ausgeben, also entweder 
doch uint32_t verwenden, oder du musst sicherstellen, dass zahl3 nie zu 
groß für einen uint16_t ist/wird.
1
  char zahl1[4]="104";
2
  //long unsigned zahl2;
3
  uint16_t  zahl2;
4
  zahl2 = (uint16_t) strtoul(zahl1, (void *) 0, 10);
5
  //ich bekomme zahl2 = 104
6
  printf("zahl1 -> %s \t||\t zahl2 -> %ld \n",zahl1,zahl2);
7
8
  //jetzt ich definiere
9
  uint32_t zahl3;
10
  zahl3 = (uint32_t) strtoul(zahl1, (void *) 0, 10);
11
  //ich bekomme zahl2 = 404
12
  printf("zahl1 -> %s \t||\t zahl3 -> %ld \n",zahl1,zahl3);

[1] http://www.goblack.de/desy/sc12chip/c/bibliothek/strtol.html

von Timmo H. (masterfx)


Lesenswert?

Hallo Gast. Der Prototyp sieht so aus:
1
 unsigned long strtoul( const char *start, char **end, int base );
Du übergibst als base 16 bzw. 32, das ist natürlich völlig falsch, da 
du ja im Dezimalsystem arbeiten willst, daher zur Basis 10. Dann klappts 
auch.

von Gast (Gast)


Lesenswert?

Danke zusammen

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.