.TH ATOF 3
.SH NAME
atof, atoi, atol, atoll, charstod, strtod, strtol, strtoll, strtoul, strtoull \- convert text to numbers
.SH SYNOPSIS
.B #include <u.h>
.br
.B #include <libc.h>
.PP
.nf
.ta \w'\fLdouble 'u
.B
double	atof(char *nptr)
.PP
.B
int	atoi(char *nptr)
.PP
.B
long	atol(char *nptr)
.PP
.B
vlong	atoll(char *nptr)
.PP
.B
double	charstod(int (*f)(void *), void *a)
.PP
.B
double	strtod(char *nptr, char **rptr)
.PP
.B
long	strtol(char *nptr, char **rptr, int base)
.PP
.B
vlong	strtoll(char *nptr, char **rptr, int base)
.PP
.B
ulong	strtoul(char *nptr, char **rptr, int base)
.PP
.B
vlong	strtoull(char *nptr, char **rptr, int base)
.fi
.SH DESCRIPTION
.IR Atof ,
.IR atoi ,
.IR atol ,
and
.I atoll
convert a string pointed to by
.I nptr
to floating, integer, long integer, and long long integer
.RB ( vlong )
representation respectively.
The first unrecognized character ends the string.
Leading C escapes are understood, as in
.I strtol
with
.I base
zero (described below).
.PP
.I Atof
recognizes an optional string of tabs and spaces,
then an optional sign, then
a string of digits optionally containing a decimal
point, then an optional 
.L e
or 
.L E
followed
by an optionally signed integer.
.PP
.I Atoi
and
.I atol
recognize an optional string of tabs and spaces,
then an optional sign, then a string of
decimal digits.
.PP
.IR Strtod ,
.IR strtol ,
.IR strtoll ,
.IR strtoul ,
and
.I strtoull
behave similarly to 
.I atof
and
.I atol
and, if
.I rptr
is not zero, set
.I *rptr
to point to the input character
immediately after the string converted.
.PP
.IR Strtol ,
.IR strtoll ,
.IR strtoul ,
and
.IR strtoull
interpret the digit string in the specified
.IR base ,
from 2 to 36,
each digit being less than the base.
Digits with value over 9 are represented by letters,
a-z or A-Z.
If
.I base
is 0, the input is interpreted as an integral constant in
the style of C (with no suffixed type indicators):
numbers are octal if they begin with
.LR 0 ,
hexadecimal if they begin with
.L 0x
or
.LR 0X ,
otherwise decimal.
.PP
.I Charstod
interprets floating point numbers in the manner of
.IR atof ,
but gets successive characters by calling
.BR (*\fIf\fP)(a) .
The last call to
.I f
terminates the scan, so it must have returned a character that
is not a legal continuation of a number.
Therefore, it may be necessary to back up the input stream one character
after calling
.IR charstod .
.SH SOURCE
.B \*9/src/lib9
.SH SEE ALSO
.IR fscanf (3)
.SH DIAGNOSTICS
Zero is returned if the beginning of the input string is not
interpretable as a number; even in this case,
.I rptr
will be updated.
.br
These routines set
.IR errstr .
.SH BUGS
.I Atoi
and
.I atol
accept octal and hexadecimal numbers in the style of C,
contrary to the ANSI specification.
.PP
.IR Atof ,
.IR strtod ,
.IR strtol ,
.IR strtoul ,
.IR strtoll ,
and
.IR strtoull
are not provided:
they are expected to be provided by the underlying system.
.PP
Because they are implemented in the fmt library,
.I charstod
and
.I strtod
are preprocessor macros defined as
.I fmtcharstod
and
.IR fmtstrtod .
.PP
To avoid name conflicts with the underlying system,
.IR atoi ,
.IR atol ,
and
.I atoll
are preprocessor macros defined as
.IR p9atoi ,
.IR p9atol ,
and
.IR p9atoll ;
see
.IR intro (3).
