aboutsummaryrefslogtreecommitdiff
path: root/man/man3/atof.3
blob: 8b462aa9d22dcee921a5830ab2a6c0ae2b0ecba8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
.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
.MR 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
.MR intro (3) .