strtoul()

strtoul ist definiert in der stdlib, die in C über stdlib.h, bzw. in C++ über cstdlib eingebunden wird.

Funktion

strtoul konvertiert einen ASCII-String in eine breite Integerzahl ohne Vorzeichen (String to unsigned long integer - strtoul).

Zunächst werden sämtliche Whitespaces (Leerzeichen, Tabs) übersprungen, bis die ersten Ziffern gefunden werden. Es darf ein + bzw. - der Zahl vorangestellt sein.

Werden Zeichen gefunden, die nicht interpretiert werden können, so wird die Konvertierung abgebrochen und die bisher interpretierte Zahl zurückgegeben, sowie die Adresse des Zeichens, das nicht mehr als Ziffer gelesen werden konnte. Somit lassen sich sehr einfach hintereinanderstehende Zahlen einlesen. Zusätzlich kann die Basis angegeben werden. Gültige Basen sind zwischen 2 und 36, wobei zunächst Ziffern (0..9) und anschließend Buchstaben (a..z, A..Z) als Ziffern verwendet werden.

Ist die Basis mit '0' angegeben, so können die Strings einen Hinweis auf die verwendete Basis machen (führende „0“ für oktale, führende „0x“ für hexadezimal Zahlen). Werden Ziffern ohne Präfix gefunden, so werden diese Zahlen zur Basis 10 angenommen.

Die String können mit einem + oder - Zeichen beginnen.

Gültige Strings wären z.B. „ 123“, „+1232“, „-42“.

Signatur

#include <stdlib.h>
unsigned long int strtoul( char const * str, char ** endptr, int base );

str: der zu konvertierende String
endptr: Adresse einer Zeigervariablen, die auf das zuletzt gelesene Zeichen zeigt, also das Zeichen, das nicht mehr einer Zahl gehört
base: Basis, zwischen 2 und 36

Return value: die konvertierte Zahl als vorzeichenloser breiter Integerwert

Bemerkungen

Konnte keine Zahl konvertiert werden, weil der String leer oder aus nicht interpretierbaren Zeichen bestand (z.B. „abc“), so wird 0 zurückgegeben. Ist die zu konvertierende Zahl so groß, dass sie nicht dargestellt werden kann, so wird ULONG_MAX zurückgegeben und errno wird auf ERANGE gesetzt.

Die Umkehrfunktion, also einen unsigned long int-Wert in einen ASCII-String zu konvertierten, ist über sprintf() möglich.

Beispiel

#include <stdlib.h>
#include <stdio.h>
 
int main( void )
{
  char const * str = "1234 Hallo";
  unsigned long int value;
  char * succ;
 
  value = strtoul( str, &succ, 10 );
 
  printf( "Wert des Strings \"%s\": %u\nEs folgt: \'%s'\n", str, value, succ );
 
  return EXIT_SUCCESS;
}

Ausgabe:

Wert des Strings "1234 Hallo": 1234
Es folgt: ' Hallo'

siehe auch