Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Преобразует целое число в строку. Доступны более безопасные версии этих функций, см. в разделе _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, _ultow_i64towи _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_WARNINGScl в команду. В противном случае определите макрос в исходных файлах. Если вы используете предварительно скомпилированные заголовки, определите макрос в верхней части предварительно скомпилированного файла включаемого файла 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 в источник.
Чтобы использовать один из этих макросов в функции преобразования строк, объявите буфер преобразования соответствующего типа символа и используйте значение макроса для целочисленного типа и базы в качестве измерения буфера. В этой таблице перечислены макросы, подходящие для каждой функции для перечисленных баз:
| Функции | корень | Макросы |
|---|---|---|
_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)