Поделиться через


itoa, _itoa, ltoa_ltoaultoa_ultoa_i64toa_ui64toa_itow_ltow_ultow_i64tow_ui64tow

Преобразует целое число в строку. Доступны более безопасные версии этих функций, см. в разделе _itoa_s" _itow_s Функции".

Синтаксис

char * _itoa( int value, char *buffer, int radix );
char * _ltoa( long value, char *buffer, int radix );
char * _ultoa( unsigned long value, char *buffer, int radix );
char * _i64toa( long long value, char *buffer, int radix );
char * _ui64toa( unsigned long long value, char *buffer, int radix );

wchar_t * _itow( int value, wchar_t *buffer, int radix );
wchar_t * _ltow( long value, wchar_t *buffer, int radix );
wchar_t * _ultow( unsigned long value, wchar_t *buffer, int radix );
wchar_t * _i64tow( long long value, wchar_t *buffer, int radix );
wchar_t * _ui64tow( unsigned long long value, wchar_t *buffer, int radix );

// These POSIX versions of the functions have deprecated names:
char * itoa( int value, char *buffer, int radix );
char * ltoa( long value, char *buffer, int radix );
char * ultoa( unsigned long value, char *buffer, int radix );

// The following template functions are C++ only:
template <size_t size>
char *_itoa( int value, char (&buffer)[size], int radix );

template <size_t size>
char *_itoa( long value, char (&buffer)[size], int radix );

template <size_t size>
char *_itoa( unsigned long value, char (&buffer)[size], int radix );

template <size_t size>
char *_i64toa( long long value, char (&buffer)[size], int radix );

template <size_t size>
char * _ui64toa( unsigned long long value, char (&buffer)[size], int radix );

template <size_t size>
wchar_t * _itow( int value, wchar_t (&buffer)[size], int radix );

template <size_t size>
wchar_t * _ltow( long value, wchar_t (&buffer)[size], int radix );

template <size_t size>
wchar_t * _ultow( unsigned long value, wchar_t (&buffer)[size], int radix );

template <size_t size>
wchar_t * _i64tow( long long value, wchar_t (&buffer)[size], int radix );

template <size_t size>
wchar_t * _ui64tow( unsigned long long value, wchar_t (&buffer)[size],
   int radix );

Параметры

value
Число, которое требуется преобразовать.

buffer
Буфер, содержащий результат преобразования.

radix
База, используемая для преобразования value, которая должна находиться в диапазоне 2–36.

size
Длина буфера в единицах типа символа. Этот параметр выводится из аргумента buffer в C++.

Возвращаемое значение

Каждая из этих функций возвращает указатель на buffer. Не возвращается ошибка.

Замечания

Функции _itoa_ltoa, , _ultoa_i64toaи _ui64toa функции преобразуют цифры заданного value аргумента в строку символов, завершаемой null, и сохраните результат (до 33 символов для _itoa, _ltoaи , а также _ultoa65 для _i64toa и _ui64toa) в buffer. Если radix значение равно 10 и value отрицательно, первый символ хранимой строки — знак минуса (-). , _itow_ltow, _i64tow_ultowи _ui64tow функции являются широко символьными версиями _itoa, _ltoa, _ultoaи _i64toa_ui64toaсоответственно.

Внимание

Эти функции могут записывать данные в конце буфера, который слишком мал. Чтобы предотвратить переполнение буфера, убедитесь, что buffer достаточно большой для хранения преобразованных цифр, а также конечная символ null и символ знака. Неправильное использование этих функций может привести к серьезным проблемам безопасности в коде.

Из-за возможных проблем с безопасностью, по умолчанию эти функции вызывают предупреждение о прекращении использования C4996: эта функция или переменная могут быть небезопасными. Вместо этого рекомендуется использовать safe_function . Чтобы отключить нерекомендуемую функцию, используйте _CRT_SECURE_NO_WARNINGS. Мы рекомендуем изменить исходный код, чтобы использовать safe_function предлагаемое предупреждением. Более безопасные функции не записывают больше символов, чем указанный размер буфера. Дополнительные сведения см. в разделе _itoa_s" _itow_s Функции".

Чтобы использовать эти функции без предупреждения об нерекомендуемом, определите _CRT_SECURE_NO_WARNINGS макрос препроцессора перед включением заголовков CRT. Его можно определить, добавив параметр компилятора /D_CRT_SECURE_NO_WARNINGS cl в команду. В противном случае определите макрос в исходных файлах. Если вы используете предварительно скомпилированные заголовки, определите макрос в верхней части предварительно скомпилированного файла включаемого файла pch.h (stdafx.h в Visual Studio 2017 и более ранних версиях). Чтобы определить макрос в исходном коде, используйте директиву #define перед включением любого заголовка CRT, как показано в следующем примере:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdlib.h>

В C++эти функции имеют перегрузки шаблонов, которые вызывают своих более безопасных коллег. Дополнительные сведения см. в разделе "Безопасные перегрузки шаблонов".

По умолчанию глобальное состояние этих функций распространяется на приложение. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.

Имена itoaltoaPOSIX и ultoa существуют в качестве псевдонимов для _itoaфункций _ltoaи _ultoa функций. Имена POSIX устарели, так как они не соответствуют соглашениям об именах глобальных функций, относящихся к реализации, ISO C. По умолчанию эти функции вызывают нерекомендуемое предупреждение C4996: имя POSIX для этого элемента устарело. Вместо этого используйте соответствующее имя ISO C и C++: new_name Мы рекомендуем изменить исходный код, чтобы использовать более безопасные версии этих функций, _itoa_s_ltoa_sили _ultoa_s. Дополнительные сведения см. в разделе _itoa_s" _itow_s Функции".

Для переносимости исходного кода в коде может потребоваться сохранить имена POSIX. Чтобы использовать эти функции без предупреждения об нерекомендуемом, определите _CRT_NONSTDC_NO_WARNINGS макросы и _CRT_SECURE_NO_WARNINGS макросы препроцессора перед включением любых заголовков CRT. Их можно определить, добавив /D_CRT_SECURE_NO_WARNINGS /D_CRT_NONSTDC_NO_WARNINGS параметры компилятора cl в команду. В противном случае определите макросы в исходных файлах. Если вы используете предварительно скомпилированные заголовки, определите макросы в верхней части предварительно скомпилированного заголовка. Чтобы определить макросы в исходном коде, используйте #define директивы перед включением любого заголовка CRT, как показано в этом примере:

#define _CRT_NONSTDC_NO_WARNINGS 1
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdlib.h>

Максимальное количество макросов преобразования

Чтобы создать безопасные буферы для преобразований, CRT включает некоторые удобные макросы. Эти макросы определяют размер буфера, необходимый для преобразования самого длинного значения каждого целочисленного типа, включая символ конца null и знак для нескольких общих баз. Чтобы убедиться, что буфер преобразования достаточно велик, чтобы получить любое преобразование в базовой базе radix, используйте один из этих определенных макросов при выделении буфера. Макросы помогают предотвратить ошибки переполнения буфера при преобразовании целочисленных типов в строки. Эти макросы определяются при включении stdlib.h или wchar.h в источник.

Чтобы использовать один из этих макросов в функции преобразования строк, объявите буфер преобразования соответствующего типа символа и используйте значение макроса для целочисленного типа и базы в качестве измерения буфера. В этой таблице перечислены макросы, подходящие для каждой функции для перечисленных баз:

Функции radix Макросы
_itoa, _itow 16
10
8
2
_MAX_ITOSTR_BASE16_COUNT
_MAX_ITOSTR_BASE10_COUNT
_MAX_ITOSTR_BASE8_COUNT
_MAX_ITOSTR_BASE2_COUNT
_ltoa, _ltow 16
10
8
2
_MAX_LTOSTR_BASE16_COUNT
_MAX_LTOSTR_BASE10_COUNT
_MAX_LTOSTR_BASE8_COUNT
_MAX_LTOSTR_BASE2_COUNT
_ultoa, _ultow 16
10
8
2
_MAX_ULTOSTR_BASE16_COUNT
_MAX_ULTOSTR_BASE10_COUNT
_MAX_ULTOSTR_BASE8_COUNT
_MAX_ULTOSTR_BASE2_COUNT
_i64toa, _i64tow 16
10
8
2
_MAX_I64TOSTR_BASE16_COUNT
_MAX_I64TOSTR_BASE10_COUNT
_MAX_I64TOSTR_BASE8_COUNT
_MAX_I64TOSTR_BASE2_COUNT
_ui64toa, _ui64tow 16
10
8
2
_MAX_U64TOSTR_BASE16_COUNT
_MAX_U64TOSTR_BASE10_COUNT
_MAX_U64TOSTR_BASE8_COUNT
_MAX_U64TOSTR_BASE2_COUNT

В этом примере используется макрос счетчика преобразований для определения буфера достаточно большого unsigned long long размера, чтобы содержать в базе 2:

#include <wchar.h>
#include <iostream>
int main()
{
    wchar_t buffer[_MAX_U64TOSTR_BASE2_COUNT];
    std:wcout << _ui64tow(0xFFFFFFFFFFFFFFFFull, buffer, 2) << std::endl;
}

Сопоставления подпрограмм универсального текста

Tchar.h рутина _UNICODE и _MBCS не определен _MBCS Определенные _UNICODE Определенные
_itot _itoa _itoa _itow
_ltot _ltoa _ltoa _ltow
_ultot _ultoa _ultoa _ultow
_i64tot _i64toa _i64toa _i64tow
_ui64tot _ui64toa _ui64toa _ui64tow

Требования

Маршрут Обязательный заголовок
itoa, , ltoaultoa <stdlib.h>
_itoa, , _ltoa_ultoa, _i64toa_ui64toa <stdlib.h>
_itow, , _ltow_ultow, _i64tow_ui64tow <stdlib.h> или <wchar.h>

Эти функции и макросы относятся к корпорации Майкрософт. Дополнительные сведения о совместимости см. в разделе Совместимость.

Пример

В этом примере демонстрируется использование некоторых функций преобразования целых чисел. Обратите внимание на использование макроса для молчания _CRT_SECURE_NO_WARNINGS предупреждения C4996.

// crt_itoa.c
// Compile by using: cl /W4 crt_itoa.c
// This program makes use of the _itoa functions
// in various examples.

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>      // for printf
#include <string.h>     // for strnlen
#include <stdlib.h>     // for _countof, _itoa fns, _MAX_COUNT macros

int main(void)
{
    char buffer[_MAX_U64TOSTR_BASE2_COUNT];
    int r;

    for (r = 10; r >= 2; --r)
    {
        _itoa(-1, buffer, r);
        printf("base %d: %s (%d chars)\n", r, buffer,
            strnlen(buffer, _countof(buffer)));
    }
    printf("\n");

    for (r = 10; r >= 2; --r)
    {
        _i64toa(-1LL, buffer, r);
        printf("base %d: %s (%d chars)\n", r, buffer,
            strnlen(buffer, _countof(buffer)));
    }
    printf("\n");

    for (r = 10; r >= 2; --r)
    {
        _ui64toa(0xffffffffffffffffULL, buffer, r);
        printf("base %d: %s (%d chars)\n", r, buffer,
            strnlen(buffer, _countof(buffer)));
    }
}
base 10: -1 (2 chars)
base 9: 12068657453 (11 chars)
base 8: 37777777777 (11 chars)
base 7: 211301422353 (12 chars)
base 6: 1550104015503 (13 chars)
base 5: 32244002423140 (14 chars)
base 4: 3333333333333333 (16 chars)
base 3: 102002022201221111210 (21 chars)
base 2: 11111111111111111111111111111111 (32 chars)

base 10: -1 (2 chars)
base 9: 145808576354216723756 (21 chars)
base 8: 1777777777777777777777 (22 chars)
base 7: 45012021522523134134601 (23 chars)
base 6: 3520522010102100444244423 (25 chars)
base 5: 2214220303114400424121122430 (28 chars)
base 4: 33333333333333333333333333333333 (32 chars)
base 3: 11112220022122120101211020120210210211220 (41 chars)
base 2: 1111111111111111111111111111111111111111111111111111111111111111 (64 chars)

base 10: 18446744073709551615 (20 chars)
base 9: 145808576354216723756 (21 chars)
base 8: 1777777777777777777777 (22 chars)
base 7: 45012021522523134134601 (23 chars)
base 6: 3520522010102100444244423 (25 chars)
base 5: 2214220303114400424121122430 (28 chars)
base 4: 33333333333333333333333333333333 (32 chars)
base 3: 11112220022122120101211020120210210211220 (41 chars)
base 2: 1111111111111111111111111111111111111111111111111111111111111111 (64 chars)

См. также

Преобразование данных
_itoa_s, _itow_s функции