Функция itoa — широко распространённое нестандартное расширение стандартного языка программирования Си. Её использование не предусматривает переносимости, поскольку эта функция не определена ни в одном стандарте языка Си; тем не менее, зачастую компиляторы поддерживают её за счет использования заголовка <stdlib.h>
, причем не совсем в удобном виде, так как она весьма близка по смыслу к стандартной библиотечной функции atoi
.
void* itoa(int input, char *buffer, int radix)
itoa
принимает передаваемое целое число input
и конвертирует его в число в основании корня radix
. Полученное число (последовательность цифр основания radix
) записывается в буфер вывода buffer
.
Аргумент radix определяет основание системы исчисления для input; его значение может лежать в пределах от 2 до 36.
В зависимости от реализации, itoa
может возвращать указатель на первый символ в буфере buffer
, или может быть создана таким образом, чтобы передавать нуль-buffer
, в результате чего функция возвращает длину строки, которая была записана в корректный buffer
.
Для преобразования числа в строку с основанием 8 (восьмеричная), 10 (десятичная) или 16 (шестнадцатеричная система счисления) альтернативой, совместимой со стандартом, является использование стандартной библиотечной функции sprintf
.
Функция itoa
появилась в первом издании книги Брайана Кернигана и Дениса Ритчи Язык программирования Си, на странице 60. Второе издание Язык программирования Си («K&R2») на стр. 64 содержало нижеследующую реализацию itoa
. В книге отмечено несколько вопросов, связанных с этой реализацией, включая тот факт, что она не в состоянии корректно обработать самое маленькое отрицательное число −2длина машинного слова в битах-1.[1]
/* itoa: конвертируем n в символы в s */
void itoa(int n, char s[])
{
int i, sign;
if ((sign = n) < 0) /* записываем знак */
n = -n; /* делаем n положительным числом */
i = 0;
do { /* генерируем цифры в обратном порядке */
s[i++] = n % 10 + '0'; /* берем следующую цифру */
} while ((n /= 10) > 0); /* удаляем */
if (sign < 0)
s[i++] = '-';
s[i] = '\0';
reverse(s);
}
Функция reverse
реализована двумя страницами ранее:
#include <string.h>
/* reverse: переворачиваем строку s на месте */
void reverse(char s[])
{
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;
}
}
Функция itoa
(а также схожая с ней функция ftoa
, конвертирующая числа с плавающей запятой в строку) указана в первой версии руководства по Unix.[2] В отличие от приведённых выше версий, библиотечная Unix-версия имела интерфейс, примерно похожий на
void itoa(int input, void (*subr)(char))
и вызывала подпрограмму обратного вызова subr
для каждого символа в строке вывода, что устраняло необходимость в большом буфере для хранения сразу всей строки.
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .