Главная
Новости
Статьи
Строительство
Ремонт
Дизайн и интерьер
Строительная теплофизика
Прочность сплавов
Основания и фундаменты
Осадочные породы
Прочность дорог
Минералогия глин
Краны башенные
Справочник токаря
Цементный бетон




24.06.2022


21.06.2022


17.06.2022


17.06.2022


15.06.2022


15.06.2022


15.06.2022





Яндекс.Метрика

itoa (Си)

04.02.2022


Функция itoa в языке программирования C возвращает запись указанного целого числа в позиционной системе счисления с заданным основанием (например число 10 в системе счисления с основанием 7 записывается как "13"). Эта функция не определена ни в одном стандарте языка Си, но зачастую компиляторы поддерживают её за счет использования заголовка <stdlib.h>, так как она весьма близка по смыслу к стандартной библиотечной функции atoi.

void* itoa(int input, char *buffer, int radix)

itoa принимает передаваемое целое число input и возвращает его запись в системе счисления по основанию radix (которое должно принимать значения от 2 до 36). Алфавит вывода состоит из 36 знаков - сначала 10 арабских цифр, затем 26 букв стандартной латиницы. Полученное число (последовательность цифр основания radix) записывается в буфер вывода buffer.

В зависимости от реализации, itoa может возвращать указатель на первый символ в буфере buffer, или может быть создана таким образом, чтобы передавать нуль-buffer, в результате чего функция возвращает длину строки, которая была записана в корректный buffer.

Для преобразования числа в строку с основанием 8 (восьмеричная), 10 (десятичная) или 16 (шестнадцатеричная система счисления) альтернативой, совместимой со стандартом, является использование стандартной библиотечной функции sprintf.

Реализация от Кернигана и Ритчи

Функция itoa появилась в первом издании книги Брайана Кернигана и Дениса Ритчи Язык программирования Си, на странице 60. Второе издание Язык программирования Си («K&R2») на стр. 64 содержало нижеследующую реализацию itoa. В книге отмечено несколько вопросов, связанных с этой реализацией, включая тот факт, что она не в состоянии корректно обработать самое маленькое отрицательное число −2длина машинного слова в битах-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] = ''; 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. В отличие от приведённых выше версий, библиотечная Unix-версия имела интерфейс, примерно похожий на

void itoa(int input, void (*subr)(char))

и вызывала подпрограмму обратного вызова subr для каждого символа в строке вывода, что устраняло необходимость в большом буфере для хранения сразу всей строки.

Имя:*
E-Mail:
Комментарий: