itoa
, _itoa
, , , ultoa
_ui64toa
_ltoa
_i64toa
_i64tow
_ultoa
_itow
_ltow
_ultow
ltoa
_ui64tow
Konwertuje liczbę całkowitą na ciąg. Dostępne są bezpieczniejsze wersje tych funkcji, zobacz _itoa_s
funkcje . _itow_s
Składnia
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 );
Parametry
value
Liczba do przekonwertowania.
buffer
Bufor, który przechowuje wynik konwersji.
radix
Podstawa do użycia do konwersji value
, która musi znajdować się w zakresie od 2 do 36.
size
Długość buforu w jednostkach typu znaków. Ten parametr jest wnioskowany z argumentu buffer
w języku C++.
Wartość zwracana
Każda z tych funkcji zwraca wskaźnik do buffer
. Nie ma zwracanego błędu.
Uwagi
Funkcje _itoa
, , _ltoa
, _i64toa
_ultoa
, i _ui64toa
konwertują cyfry danego value
argumentu na ciąg znaków zakończony o wartości null i przechowują wynik (do 33 znaków dla , _ltoa
, i , i _ultoa
65 dla _itoa
_i64toa
i _ui64toa
) w buffer
. Jeśli radix
równa się 10 i value
jest ujemna, pierwszym znakiem przechowywanego ciągu jest znak minus (-). Funkcje _itow
, _ltow
, _ultow
, _i64tow
, i _ui64tow
są odpowiednio wersjami szerokiego _itoa
znaku , , _ultoa
_ltoa
, _i64toa
i _ui64toa
.
Ważne
Te funkcje mogą zapisywać poza końcem buforu, który jest zbyt mały. Aby zapobiec przepełnieniu buforu, upewnij się, że buffer
jest wystarczająco duży, aby przechowywać przekonwertowane cyfry oraz końcowy znak null i znak. Nieprawidłowe użycie tych funkcji może spowodować poważne problemy z zabezpieczeniami w kodzie.
Ze względu na potencjalne problemy z zabezpieczeniami domyślnie te funkcje powodują wycofanie ostrzeżenia C4996: Ta funkcja lub zmienna może być niebezpieczna. Rozważ użycie safe_function
zamiast tego. Aby wyłączyć wycofanie, użyj polecenia _CRT_SECURE_NO_WARNINGS
. Zalecamy zmianę kodu źródłowego w celu użycia sugerowanego safe_function
przez komunikat ostrzegawczy. Bardziej bezpieczne funkcje nie zapisują więcej znaków niż określony rozmiar buforu. Aby uzyskać więcej informacji, zobacz _itoa_s
funkcje . _itow_s
Aby użyć tych funkcji bez ostrzeżenia o wycofaniu, zdefiniuj _CRT_SECURE_NO_WARNINGS
makro preprocesora przed dołączeniem nagłówków CRT. Można go zdefiniować, dodając /D_CRT_SECURE_NO_WARNINGS
opcję kompilatora cl
do polecenia . W przeciwnym razie zdefiniuj makro w plikach źródłowych. Jeśli używasz wstępnie skompilowanych nagłówków, zdefiniuj makro w górnej części prekompilowanego pliku pch.h
dołączania nagłówka (stdafx.h
w programie Visual Studio 2017 i starszych wersjach). Aby zdefiniować makro w kodzie źródłowym #define
, należy użyć dyrektywy przed dołączeniem dowolnego nagłówka CRT, jak w tym przykładzie:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdlib.h>
W języku C++te funkcje mają przeciążenia szablonów, które wywołują ich bezpieczniejsze odpowiedniki. Aby uzyskać więcej informacji, zobacz Bezpieczne przeciążenia szablonów.
Domyślnie stan globalny tych funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.
Nazwy itoa
POSIX , ltoa
i ultoa
istnieją jako aliasy dla _itoa
funkcji , _ltoa
i _ultoa
. Nazwy POSIX są przestarzałe, ponieważ nie są zgodne z konwencjami nazw funkcji globalnych specyficznych dla implementacji iso C. Domyślnie te funkcje powodują wycofanie ostrzeżenia C4996: nazwa POSIX dla tego elementu jest przestarzała. Zamiast tego użyj nazwy zgodnej ze standardem ISO C i C++: new_name
. Zalecamy zmianę kodu źródłowego w celu używania bezpieczniejszych wersji tych funkcji, _itoa_s
, _ltoa_s
lub _ultoa_s
. Aby uzyskać więcej informacji, zobacz _itoa_s
funkcje . _itow_s
W przypadku przenośności kodu źródłowego warto zachować nazwy POSIX w kodzie. Aby użyć tych funkcji bez ostrzeżenia o wycofaniu, zdefiniuj zarówno makra _CRT_NONSTDC_NO_WARNINGS
preprocesora, jak i _CRT_SECURE_NO_WARNINGS
przed dołączeniem żadnych nagłówków CRT. Można je zdefiniować, dodając opcje kompilatora /D_CRT_SECURE_NO_WARNINGS
cl
i /D_CRT_NONSTDC_NO_WARNINGS
do polecenia . W przeciwnym razie zdefiniuj makra w plikach źródłowych. Jeśli używasz wstępnie skompilowanych nagłówków, zdefiniuj makra w górnej części prekompilowanego pliku dołączania nagłówka. Aby zdefiniować makra w kodzie źródłowym, użyj #define
dyrektyw przed dołączeniem dowolnego nagłówka CRT, jak w tym przykładzie:
#define _CRT_NONSTDC_NO_WARNINGS 1
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdlib.h>
Maksymalna liczba makr konwersji
Aby ułatwić tworzenie bezpiecznych na potrzeby konwersji, CRT zawiera pewne wygodne makra. Te makra definiują rozmiar buforu wymaganego do przekonwertowania najdłuższej możliwej wartości każdego typu liczby całkowitej, w tym znaku zakończenia o wartości null, dla kilku typowych baz. Aby upewnić się, że bufor konwersji jest wystarczająco duży, aby otrzymać dowolną konwersję w bazie określonej przez radix
program , użyj jednego z tych zdefiniowanych makr podczas przydzielania buforu. Makra ułatwiają zapobieganie błędom przepełnienia buforu podczas konwertowania typów całkowitych na ciągi. Te makra są definiowane w przypadku uwzględnienia pliku stdlib.h lub wchar.h w źródle.
Aby użyć jednego z tych makr w funkcji konwersji ciągów, zadeklaruj bufor konwersji odpowiedniego typu znaku i użyj wartości makra dla typu liczby całkowitej i podstawy jako wymiaru buforu. W tej tabeli wymieniono makra, które są odpowiednie dla każdej funkcji dla wymienionych baz:
Funkcje | podstawa | Makra |
---|---|---|
_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 |
W tym przykładzie użyto makra liczby konwersji, aby zdefiniować bufor wystarczająco duży, aby zawierał element unsigned long long
w bazie 2:
#include <wchar.h>
#include <iostream>
int main()
{
wchar_t buffer[_MAX_U64TOSTR_BASE2_COUNT];
std:wcout << _ui64tow(0xFFFFFFFFFFFFFFFFull, buffer, 2) << std::endl;
}
Mapowania procedur tekstu ogólnego
Tchar.h rutyna |
_UNICODE i _MBCS niezdefiniowane |
_MBCS zdefiniowany |
_UNICODE zdefiniowany |
---|---|---|---|
_itot |
_itoa |
_itoa |
_itow |
_ltot |
_ltoa |
_ltoa |
_ltow |
_ultot |
_ultoa |
_ultoa |
_ultow |
_i64tot |
_i64toa |
_i64toa |
_i64tow |
_ui64tot |
_ui64toa |
_ui64toa |
_ui64tow |
Wymagania
Procedura | Wymagany nagłówek |
---|---|
itoa , , ltoa ultoa |
<stdlib.h> |
_itoa , , _ltoa , _ultoa , , _i64toa _ui64toa |
<stdlib.h> |
_itow , , _ltow , _ultow , , _i64tow _ui64tow |
<stdlib.h> lub <wchar.h> |
Te funkcje i makra są specyficzne dla firmy Microsoft. Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.
Przykład
W tym przykładzie pokazano użycie niektórych funkcji konwersji całkowitej. Zwróć uwagę na użycie makra _CRT_SECURE_NO_WARNINGS
w celu wyciszenia ostrzeżenia 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)