Itoa (Си)

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  широко распространённое нестандартное расширение стандартного языка программирования Си. Ее использование не предусматривает переносимости, поскольку эта… …   Википедия

  • 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 — заголовок (заголовочный файл) стандартной библиотеки общего назначения языка Си, который содержит в себе функции, занимающиеся выделением памяти, контроль процесса выполнения программы, преобразования типов и другие. Заголовок вполне совместим с… …   Википедия


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

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