Udostępnij za pośrednictwem


itoa, _itoa, , , ultoa_ui64toa_ltoa_i64toa_i64tow_ultoa_itow_ltow_ultowltoa_ui64tow

Konwertuje liczbę całkowitą na ciąg. Dostępne są bezpieczniejsze wersje tych funkcji, zobacz _itoa_sfunkcje . _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 _ultoa65 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 _itoaznaku , , _ultoa_ltoa, _i64toai _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_sfunkcje . _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 itoaPOSIX , ltoai ultoa istnieją jako aliasy dla _itoafunkcji , _ltoai _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_slub _ultoa_s. Aby uzyskać więcej informacji, zobacz _itoa_sfunkcje . _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 radixprogram , 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, , ltoaultoa <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)

Zobacz też

Konwersja danych
_itoa_s, _itow_s funkcje