Itoa - funktionen i programmeringsspråket C returnerar positionsbeteckningen för det angivna heltal med den givna basen (till exempel siffran 10 i bas 7 skrivs som "13"). Den här funktionen är inte definierad i något standard C-språk, men ofta stödjer kompilatorer den genom att använda headern , eftersom den i betydelse ligger mycket nära standardbiblioteksfunktionen . <stdlib.h>atoi
void* itoa(int input, char *buffer, int radix)itoaaccepterar det godkända heltal inputoch returnerar dess representation i bastalsystemet radix(som måste ha värden från 2 till 36). Utdataalfabetet består av 36 tecken - först 10 arabiska siffror, sedan 26 vanliga latinska bokstäver. Det resulterande numret (en sekvens av bassiffror radix) skrivs till utgångsbufferten buffer.
Beroende på implementeringen, itoakan returnera en pekare till det första tecknet i bufferten buffer, eller kan vara konstruerad för att skicka en null- , vilket buffergör att funktionen returnerar längden på strängen som skrevs till rätt buffer.
För att konvertera ett tal till en sträng med basen 8 (oktal), 10 (decimal) eller 16 ( hexadecimal ) , är ett standardkompatibelt alternativ att använda en standardbiblioteksfunktion .sprintf
Funktionen itoadök upp i den första utgåvan av Brian Kernighan och Denis Ritchies The C Programming Language , på sidan 60. Den andra utgåvan av The C Programming Language ("K&R2") på sidan 64 innehöll följande implementering itoa. Boken noterar flera problem med denna implementering, inklusive det faktum att den misslyckas med att korrekt hantera det minsta negativa talet -2 längden på ett maskinord i bitar-1 . [ett]
/* itoa: konvertera n till tecken i s */ void itoa ( int n , char s []) { int i , tecken ; if (( tecken = n ) < 0 ) /* skriv tecken */ n = - n ; /* gör n till ett positivt tal */ i = 0 _ genererar { /* siffror i omvänd ordning */ s [ i ++ ] = n % 10 + '0' ; /* få nästa siffra */ } while (( n /= 10 ) > 0 ); /* radera */ if ( tecken < 0 ) s [ i ++ ] = '-' ; s [ i ] = '\0' ; omvända ( s ); }Funktion reverseimplementerad två sidor tidigare:
#include <string.h> /* omvänd: omvänd sträng är på plats */ void omvänd ( tecken [ ]) { int i , j ; röding c ; för ( i = 0 , j = strlen ( s ) -1 ; i < j ; i ++ , j - ) { c = s [ i ]; s [ i ] = s [ j ]; s [ j ] = c ; } }Funktionen itoa(och en liknande funktion ftoasom omvandlar flyttal till en sträng) finns med i den första versionen av Unix- manualen . [2] Till skillnad från versionerna ovan hade Unix-biblioteksversionen ett gränssnitt liknande
void itoa(int input, void (*subr)(char))och anropade en återuppringningsrutin subr för varje tecken i utgångsraden, vilket eliminerar behovet av en stor buffert för att lagra hela raden på en gång.