itoa (Си)

itoa (Си)

Функция 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 для каждого символа в строке вывода, что устраняло необходимость в большом буфере для хранения сразу всей строки.

См. также

Примечания

  1. Решение этого вопроса смотри «K&R2 solutions» на сайте clc-wiki.net.
  2. «Unix Programmer’s Manual», 3 ноября 1971. Глава «Library routines».

Ссылки

  • string itoa(int n) — Функция C++ конвертации int в string (без утечек памяти!)  (англ.)
  • How do I use itoa() with GCC? — реализации itoa() с тестами производительности  (англ.)
  • lexical_cast — альтернатива для C++, часть библиотек boost  (англ.)
  • modp_numtoa — альтернатива для C/C++ для преобразования целых и чисел с плавающей точкой в символы.  (англ.)
  • Good old Integer To Ascii conversion: itoa — Еще одна достаточно быстрая реализация itoa для различных типов данных, плюс некоторая обертка в стиле boost в виде специализаций шаблона boost::lexical_cast  (англ.).
  • Описание itoa  (рус.)

Wikimedia Foundation. 2010.

Игры ⚽ Поможем сделать НИР

Полезное


Смотреть что такое "itoa (Си)" в других словарях:

  • Itoa (Си) — Функция itoa широко распространенное нестандартное расширение стандартного языка программирования Си. Ее использование не предусматривает переносимости, поскольку эта функция не определена ни в одном стандарте языка Си; тем не менее, зачастую… …   Википедия

  • Itoa — The itoa function is a widespread non standard extension to the standard C programming language. It cannot be portably used, as it is not defined in any of the C language standards; however, compilers often provide it through the header while in… …   Wikipedia

  • Itoa —   Itoa Clasificación cientí …   Wikipedia Español

  • Itoa (значения) — Itoa: Itoa научное название рода растений из семейства Ивовые (Salicaceae). itoa функция языка Си, не входящая в стандарт языка …   Википедия

  • Itoa — …   Википедия

  • ITOA — Information Technology Operations Analysis (Academic & Science » Universities) Information Technology Operations Analysis (Governmental » Military) Information Technology Operations Analysis (Business » General) …   Abbreviations dictionary

  • Итоа — Итоа …   Википедия

  • Cyclone (programming language) — Cyclone Appeared in 2006 (2006) Designed by AT T Labs Stable release 1.0 (May 8, 2006; 5 years ago (2006 05 08)) Influenced by …   Wikipedia

  • SNUSP — (un acronyme récursif signifiant SNUSP s Not Unix, but Structured PATH) est un langage de programmation exotique issu de la transformation du Brainfuck en un langage à deux dimensions, inspiré d un langage appelé PATH[réf. nécessaire]. Le… …   Wikipédia en Français

  • Stdlib.h — заголовок (заголовочный файл) стандартной библиотеки общего назначения языка Си, который содержит в себе функции, занимающиеся выделением памяти, контроль процесса выполнения программы, преобразования типов и другие. Заголовок вполне совместим с… …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»