Condividi tramite


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] [] [digitssign] [.digits] [{deD | | 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_MINe _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