itoa
, _itoa
, , ltoa
, ultoa
_ltoa
, _ultoa
_ultow
_ui64toa
_i64toa
_itow
_ltow
, _i64tow
_ui64tow
Převede celé číslo na řetězec. Bezpečnější verze těchto funkcí jsou k dispozici, viz _itoa_s
, _itow_s
funkce.
Syntaxe
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
Číslo, které se má převést.
buffer
Vyrovnávací paměť, která obsahuje výsledek převodu.
radix
Základ pro převod , který musí být v rozsahu value
2-36.
size
Délka vyrovnávací paměti v jednotkách typu znaku. Tento parametr je odvozen z argumentu buffer
v jazyce C++.
Vrácená hodnota
Každá z těchto funkcí vrátí ukazatel na buffer
. Nevrátí se žádná chyba.
Poznámky
Funkce _itoa
, , _ultoa
_ltoa
_i64toa
a _ui64toa
funkce převádějí číslice daného value
argumentu na řetězec znaků ukončeného hodnotou null a uloží výsledek (až 33 znaků pro _itoa
, _ltoa
a , a _ultoa
65 pro _i64toa
a _ui64toa
) do .buffer
Pokud radix
se rovná 10 a value
je záporný, první znak uloženého řetězce je znaménko minus (-). Funkce _itow
, , _ltow
, _i64tow
_ultow
a _ui64tow
jsou široce znakové _itoa
verze , _ltoa
_ultoa
, _i64toa
, a _ui64toa
, v uvedeném pořadí.
Důležité
Tyto funkce můžou zapsat konec vyrovnávací paměti, která je příliš malá. Chcete-li zabránit přetečení vyrovnávací paměti, ujistěte se, že buffer
je dostatečně velký, aby bylo možné uchovávat převedené číslice a koncové znaky null a znak znaménka. Zneužití těchto funkcí může způsobit vážné problémy se zabezpečením ve vašem kódu.
Vzhledem k jejich potenciálu pro problémy se zabezpečením ve výchozím nastavení tyto funkce způsobují upozornění na vyřazení C4996: Tato funkce nebo proměnná může být nebezpečná. Místo toho zvažte použití safe_function
. Chcete-li zakázat vyřazení, použijte _CRT_SECURE_NO_WARNINGS
. Doporučujeme změnit zdrojový kód tak, aby používal safe_function
navrhovaný upozorněním. Bezpečnější funkce nezapisuje více znaků než zadaná velikost vyrovnávací paměti. Další informace naleznete v tématu _itoa_s
, _itow_s
funkce.
Pokud chcete tyto funkce použít bez upozornění na vyřazení, před zahrnutím hlaviček CRT definujte _CRT_SECURE_NO_WARNINGS
makro preprocesoru. Můžete ho definovat přidáním /D_CRT_SECURE_NO_WARNINGS
možnosti kompilátoru cl
do příkazu. V opačném případě definujte makro ve zdrojových souborech. Pokud používáte předkompilované hlavičky, definujte makro v horní části předkompilovaného souboru pch.h
zahrnutí hlaviček (stdafx.h
v sadě Visual Studio 2017 a starší). Pokud chcete definovat makro ve zdrojovém kódu, použijte #define
před zahrnutím jakékoli hlavičky CRT direktivu, jak je znázorněno v tomto příkladu:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdlib.h>
V jazyce C++ mají tyto funkce přetížení šablon, které vyvolávají jejich bezpečnější protějšky. Další informace naleznete v tématu Přetížení šablon zabezpečení.
Ve výchozím nastavení je globální stav těchto funkcí vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.
Názvy itoa
ltoa
POSIX a ultoa
existují jako aliasy pro _itoa
_ltoa
, a _ultoa
funkce. Názvy POSIX jsou zastaralé, protože nedodržují konvence názvů globálních funkcí specifických pro implementaci ISO C. Ve výchozím nastavení tyto funkce způsobují upozornění na vyřazení C4996: Název POSIX pro tuto položku je zastaralý. Místo toho použijte odpovídající název ISO C a C++: new_name
. Doporučujeme změnit zdrojový kód tak, aby používal bezpečnější verze těchto funkcí, _itoa_s
_ltoa_s
nebo _ultoa_s
. Další informace naleznete v tématu _itoa_s
, _itow_s
funkce.
Pro přenositelnost zdrojového kódu můžete raději zachovat názvy POSIX ve vašem kódu. Pokud chcete tyto funkce použít bez upozornění na vyřazení, definujte před zahrnutím hlaviček CRT makra i _CRT_NONSTDC_NO_WARNINGS
_CRT_SECURE_NO_WARNINGS
makra preprocesoru. Můžete je definovat přidáním /D_CRT_SECURE_NO_WARNINGS
možností kompilátoru /D_CRT_NONSTDC_NO_WARNINGS
cl
do příkazu. V opačném případě definujte makra ve zdrojových souborech. Pokud používáte předkompilované hlavičky, definujte makra v horní části předkompilovaného souboru zahrnutí hlaviček. Chcete-li definovat makra ve zdrojovém kódu, použijte #define
direktivy před zahrnutím jakékoli hlavičky CRT, jak je znázorněno v tomto příkladu:
#define _CRT_NONSTDC_NO_WARNINGS 1
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdlib.h>
Makra maximálního počtu převodů
Aby bylo možné vytvořit zabezpečené vyrovnávací paměti pro převody, CRT obsahuje některá praktická makra. Tato makra definují velikost vyrovnávací paměti potřebné k převodu nejdelší možné hodnoty každého celočíselného typu, včetně ukončovací znak null a znaku znaménka, pro několik společných základů. Chcete-li zajistit, aby byla vyrovnávací paměť převodu dostatečně velká pro příjem jakéhokoli převodu v základu určeném radix
nástrojem , použijte při přidělení vyrovnávací paměti jedno z těchto definovaných maker. Makra pomáhají zabránit chybám přetečení vyrovnávací paměti při převodu integrálních typů na řetězce. Tato makra jsou definována, když do zdroje zahrnete stdlib.h nebo wchar.h.
Chcete-li použít jedno z těchto maker ve funkci převodu řetězců, deklarujte vyrovnávací paměť převodu příslušného typu znaku a jako dimenzi vyrovnávací paměti použijte hodnotu makra pro typ celého čísla a základ. Tato tabulka uvádí makra, která jsou vhodná pro každou funkci pro uvedené základy:
Funkce | základ | 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 |
Tento příklad používá makro počtu převodů k definování vyrovnávací paměti dostatečně velké, aby obsahovalo v základu 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;
}
Mapování rutin obecného textu
Tchar.h rutina |
_UNICODE a _MBCS není definován |
_MBCS definovaný |
_UNICODE definovaný |
---|---|---|---|
_itot |
_itoa |
_itoa |
_itow |
_ltot |
_ltoa |
_ltoa |
_ltow |
_ultot |
_ultoa |
_ultoa |
_ultow |
_i64tot |
_i64toa |
_i64toa |
_i64tow |
_ui64tot |
_ui64toa |
_ui64toa |
_ui64tow |
Požadavky
Rutina | Požadovaný hlavičkový soubor |
---|---|
itoa , , ltoa ultoa |
<stdlib.h> |
_itoa , _ltoa , _ultoa , , _i64toa _ui64toa |
<stdlib.h> |
_itow , _ltow , _ultow , , _i64tow _ui64tow |
<stdlib.h> nebo <wchar.h> |
Tyto funkce a makra jsou specifické pro Microsoft. Další informace o kompatibilitě najdete v tématu Kompatibilita.
Příklad
Tato ukázka ukazuje použití některých celočíselné převodní funkce. Všimněte si použití _CRT_SECURE_NO_WARNINGS
makra k tichu upozornění 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)