Funkce itoa v programovacím jazyce C vrací poziční zápis zadaného celého čísla s daným základem (např. číslo 10 v základu 7 se zapisuje jako „13“). Tato funkce není definována v žádném standardním jazyce C, ale kompilátory ji často podporují pomocí hlavičky , protože je svým významem velmi blízká funkci standardní knihovny . <stdlib.h>atoi
void* itoa(int input, char *buffer, int radix)itoapřijme předané celé číslo inputa vrátí jeho reprezentaci v základním číselném systému radix(který musí nabývat hodnot od 2 do 36). Výstupní abeceda se skládá z 36 znaků – nejprve 10 arabských číslic, poté 26 standardních latinských písmen. Výsledné číslo (posloupnost základních číslic radix) se zapíše do výstupní vyrovnávací paměti buffer.
V závislosti na implementaci itoamůže vrátit ukazatel na první znak ve vyrovnávací paměti buffernebo může být zkonstruován tak, aby předal null - buffer, což způsobí, že funkce vrátí délku řetězce, který byl zapsán do správného buffer.
Chcete-li převést číslo na řetězec se základem 8 (osmičková), 10 (desítková) nebo 16 ( hexadecimální ), alternativou vyhovující standardu je použití standardní knihovní funkce sprintf.
Funkce itoase objevila v prvním vydání knihy Brian Kernighan a Denis Ritchie The C Programming Language na straně 60. Druhé vydání The C Programming Language ("K&R2") na straně 64 obsahovalo následující implementaci itoa. Kniha si všímá několika problémů s touto implementací, včetně skutečnosti, že nedokáže správně zpracovat nejmenší záporné číslo −2 délky strojového slova v bitech-1 . [jeden]
/* itoa: převést n na znaky v s */ void itoa ( int n , char s []) { int i , znamení ; if (( znaménko = n ) < 0 ) /* napište znaménko */ n = - n ; /* udělej z n kladné číslo */ i = 0 _ do { /* generuje čísla v opačném pořadí */ s [ i ++ ] = n % 10 + '0' ; /* získat další číslici */ } while (( n /= 10 ) > 0 ); /* smazat */ if ( znaménko < 0 ) s [ i ++ ] = '-' ; s [ i ] = '\0' ; reverzní ( s ); }Funkce reverseimplementovaná o dvě stránky dříve:
#include <řetězec.h> /* obráceně: obrácený řetězec s na místě */ void reverzní ( znaků [ ]) { int i , j ; char c ; for ( i = 0 , j = strlen ( s ) -1 ; i < j ; i ++ , j -- ) { c = s [ i ]; s [ i ] = s [ j ]; s [ j ] = c ; } }Funkce itoa(a podobná funkce ftoa, která převádí čísla s plovoucí desetinnou čárkou na řetězec) je uvedena v první verzi unixového manuálu . [2] Na rozdíl od výše uvedených verzí měla verze knihovny Unix rozhraní podobné
void itoa(int input, void (*subr)(char))a zavolal rutinu zpětného volání subr pro každý znak ve výstupním řádku, čímž se eliminuje potřeba velké vyrovnávací paměti pro uložení celého řádku najednou.