itoa
, _itoa
, ltoa
_ltoa
ultoa
_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
и , а также _ultoa
65 для _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.
Имена itoa
ltoa
POSIX и 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 , , ltoa ultoa |
<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)