Funzioni da stringa a valore numerico
Osservazioni:
Ogni funzione della strto*
famiglia converte una stringa con terminazione Null in un valore numerico. Nella tabella seguente sono elencate le funzioni disponibili.
Funzione | Descrizione |
---|---|
strtod |
Converte una stringa in un valore a virgola mobile a precisione doppia |
strtol |
Converte una stringa in un intero long |
strtoul |
Converte una stringa in un intero unsigned long |
_strtoi64 |
Converte una stringa in un integer __int64 a 64 bit |
_strtoui64 |
Converte una stringa in un unsigned integer __int64 a 64 bit |
wcstod
, wcstol
, wcstoul
e _wcstoi64
sono versioni a caratteri wide rispettivamente di strtod
, strtol
, strtoul
e _strtoi64
. L'argomento di stringa per ognuna di queste funzioni di caratteri wide è una stringa di caratteri wide. Ogni funzione si comporta in maniera identica alla relativa controparte di caratteri a un byte.
La strtod
funzione accetta due argomenti: il primo è la stringa di input e il secondo un puntatore al carattere che termina il processo di conversione. strtol
, strtoul
_strtoi64
e _strtoui64
accettano un terzo argomento come base numerica da usare nel processo di conversione.
La stringa di input è una sequenza di caratteri che può essere interpretata come valore numerico del tipo specificato. Ogni funzione interrompe la lettura della stringa al primo carattere che non può riconoscere come parte di un numero. Questo carattere può essere il carattere Null di terminazione. Per strtol
, strtoul
, _strtoi64
e _strtoui64
, il carattere di terminazione può anche essere il primo carattere numerico maggiore o uguale alla base numerica specificata dall'utente.
Se il puntatore fornito dall'utente a un carattere di fine conversione non è impostato su NULL
o nullptr
in fase di chiamata, verrà archiviato un puntatore al carattere che ha arrestato l'analisi. Se è non possibile eseguire alcuna conversione (non sono state trovate cifre valide o è stata specificata una base non valida), il valore puntatore della stringa viene archiviato in tale indirizzo.
strtod
prevede una stringa nel formato seguente:
[whitespace
] [] [digits
sign
] [.
digits
] [{d
e
D
| | E
| }[sign
]]digits
Un whitespace
può essere costituito da spazi o caratteri di tabulazione, che vengono ignorati; sign
è più (+
) o meno (-
) e digits
sono una o più cifre decimali. Se non viene visualizzata alcuna cifra prima del carattere di base, deve essercene almeno una dopo il carattere di base. Le cifre decimali possono essere seguite da un esponente, costituito da una lettera introduttiva (d
, D
, e
o E
) e un intero con segno facoltativo. Se non viene visualizzato alcun carattere esponente o radix, si presuppone che un carattere radix segua l'ultima cifra nella stringa. Il primo carattere che non rientra in questo modulo interrompe l'analisi.
Le funzioni strtol
, strtoul
, _strtoi64
e _strtoui64
prevedono una stringa nel formato seguente:
[] [whitespace
{+
| -
}] [0
[{ x
| X
}]] [digits
]
Se l'argomento di base è compreso tra 2 e 36, viene usato come base del numero. Se è 0, i caratteri iniziali a cui fa riferimento il puntatore di fine conversione vengono usati per determinare la base. Se il primo carattere è 0 e il secondo carattere non è 'x' o 'X', la stringa viene interpretata come un numero intero ottale; in caso contrario, viene interpretato come numero decimale. Se il primo carattere è '0' e il secondo carattere è 'x' o 'X', la stringa viene interpretata come integer esadecimale. Se il primo carattere è compreso tra '1' e '9', la stringa viene interpretata come integer decimale. Alle lettere da 'a' a 'z' (o da 'A' a 'Z') vengono assegnati i valori da 10 a 35. Sono consentite solo le lettere con valori assegnati minori di base
. strtoul
e _strtoui64
consentono l'uso di un prefisso con un segno di addizione (+
) o sottrazione (-
). Un segno di sottrazione iniziale indica che il valore restituito è negativo.
Il valore di output è interessato dall'impostazione dell'impostazione LC_NUMERIC
della categoria delle impostazioni locali. Per ulteriori informazioni, vedere setlocale
. Le versioni di queste funzioni senza il suffisso _l
usano le impostazioni locali correnti per questo comportamento dipendente dalle impostazioni locali. Le versioni con il suffisso _l
sono identiche ma usano il parametro passato relativo alle impostazioni locali.
Quando il valore restituito da queste funzioni provocherebbe un overflow o un underflow o quando la conversione non è possibile, vengono restituiti valori di maiuscole e minuscole speciali, come illustrato di seguito:
Funzione | Condizione | Valore restituito |
---|---|---|
strtod |
Overflow | +/- HUGE_VAL |
strtod |
Underflow o nessuna conversione | 0 |
strtol |
+ Overflow | LONG_MAX |
strtol |
- Overflow | LONG_MIN |
strtol |
Underflow o nessuna conversione | 0 |
_strtoi64 |
+ Overflow | _I64_MAX |
_strtoi64 |
- Overflow | _I64_MIN |
_strtoi64 |
Nessuna conversione | 0 |
_strtoui64 |
Overflow | _UI64_MAX |
_strtoui64 |
Nessuna conversione | 0 |
_I64_MAX
, _I64_MIN
e _UI64_MAX
sono definiti in <LIMITS.H>
.
wcstod
, wcstol
, wcstoul
, _wcstoi64
e _wcstoui64
sono versioni a caratteri wide rispettivamente di strtod
, strtol
, strtoul
, _strtoi64
e _strtoui64
. Il puntatore a un argomento di fine conversione per ognuna di queste funzioni di caratteri wide è una stringa di caratteri wide. In caso contrario, ognuna di queste funzioni di caratteri wide si comporta in modo identico alla controparte di caratteri a un byte.
Vedi anche
Conversione dati
impostazioni locali
Interpretazione di sequenze di caratteri multibyte
Supporto matematico e a virgola mobile
atof
, _atof_l
, _wtof
_wtof_l