Funcția itoa din limbajul de programare C returnează notația pozițională a întregului specificat cu baza dată (de exemplu, numărul 10 din baza 7 este scris ca „13”). Această funcție nu este definită în niciun limbaj C standard, dar adesea compilatorii o acceptă prin utilizarea antetului , deoarece este foarte apropiată ca înțeles de funcția standard de bibliotecă . <stdlib.h>atoi
void* itoa(int input, char *buffer, int radix)itoaacceptă întregul transmis inputși returnează reprezentarea acestuia în sistemul numeric de bază radix(care trebuie să ia valori de la 2 la 36). Alfabetul de ieșire este format din 36 de caractere - primele 10 cifre arabe, apoi 26 de litere latine standard. Numărul rezultat (o secvență de cifre de bază radix) este scris în memoria tampon de ieșire buffer.
În funcție de implementare, itoapoate returna un pointer la primul caracter din buffer buffersau poate fi construit pentru a trece un null - buffer, determinând ca funcția să returneze lungimea șirului care a fost scris corect buffer.
Pentru a converti un număr într-un șir cu baza 8 (octal), 10 (zecimal) sau 16 ( hexazecimal ), o alternativă conformă cu standardul este utilizarea unei funcții de bibliotecă standardsprintf .
Funcția a itoaapărut în prima ediție a limbajului de programare C al lui Brian Kernighan și Denis Ritchie , la pagina 60. A doua ediție a limbajului de programare C ("K&R2") la pagina 64 conținea următoarea implementare . Cartea notează mai multe probleme cu această implementare, inclusiv faptul că nu reușește să gestioneze corect cel mai mic număr negativ -2 lungimea unui cuvânt de mașină în biți-1 . [unu]itoa
/* itoa: convertiți n în caractere în s */ void itoa ( int n , char s []) { int i , semn ; if (( semn = n ) < 0 ) /* scrie semn */ n = - n ; /* face din n un număr pozitiv */ i = 0 _ nu { /* generează numere în ordine inversă */ s [ i ++ ] = n % 10 + '0' ; /* obține următoarea cifră */ } în timp ce (( n /= 10 ) > 0 ); /* șterge */ daca ( semnul < 0 ) s [ i ++ ] = '-' ; s [ i ] = '\0' ; invers ( e ); }Funcție reverseimplementată cu două pagini mai devreme:
#include <șir.h> /* invers: inversează șirul s în loc */ void revers ( caractere [ ]) { int i , j ; char c ; pentru ( i = 0 , j = strlen ( s ) -1 ; i < j ; i ++ , j -- ) { c = s [ i ]; s [ i ] = s [ j ]; s [ j ] = c ; } }Funcția itoa(și o funcție similară ftoacare convertește numerele în virgulă mobilă într-un șir) este listată în prima versiune a manualului Unix . [2] Spre deosebire de versiunile de mai sus, versiunea bibliotecii Unix avea o interfață similară cu
void itoa(int input, void (*subr)(char))și a numit o rutină de apel invers subr pentru fiecare caracter din linia de ieșire, eliminând necesitatea unui buffer mare pentru a stoca întreaga linie simultan.