itoa
, _itoa
, , ltoa
, _ltoa
, _ultoa
ultoa
, _i64toa
, , _ui64toa
, _itow
, , _ltow
_ultow
, , _i64tow
_ui64tow
Konvertiert eine ganze Zahl in eine Zeichenfolge. Sicherere Versionen dieser Funktionen sind verfügbar, siehe _itoa_s
Funktionen_itow_s
.
Syntax
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 );
Parameter
value
Zu konvertierende Zahl.
buffer
Puffer, der das Ergebnis der Konvertierung enthält.
radix
Die Basis für die Konvertierung von value
, die im Bereich von 2-36 liegen muss.
size
Länge des Puffers in Einheiten des Zeichentyps. Dieser Parameter wird aus dem buffer
Argument in C++ abgeleitet.
Rückgabewert
Jede dieser Funktionen gibt einen Zeiger auf buffer
zurück. Es gibt keine Fehlerrückgabe.
Hinweise
Mit _itoa
den Funktionen , , _ultoa
, _i64toa
und _ui64toa
Funktionen werden die Ziffern des angegebenen value
Arguments in eine Zeichenfolge mit NULL-Endung konvertiert und das Ergebnis (bis zu 33 Zeichen für , _ltoa
und , und _ultoa
65 für _i64toa
_itoa
und ) in buffer
._ui64toa
_ltoa
Wenn radix
gleich 10 und value
negativ ist, ist das erste Zeichen der gespeicherten Zeichenfolge das Minuszeichen (-). Die _itow
, _ltow
, _ultow
, _i64tow
, und _ui64tow
Funktionen sind breitformatige Versionen von _itoa
, _ltoa
, , _i64toa
_ultoa
, und _ui64toa
, bzw. .
Wichtig
Diese Funktionen können über das Ende eines Puffers schreiben, der zu klein ist. Um Pufferüberläufe zu verhindern, stellen Sie sicher, dass sie buffer
groß genug ist, um die konvertierten Ziffern sowie das nachfolgende NULL-Zeichen und ein Zeichenzeichen zu enthalten. Missbrauch dieser Funktionen kann schwerwiegende Sicherheitsprobleme in Ihrem Code verursachen.
Aufgrund ihres Potenziellen für Sicherheitsprobleme verursachen diese Funktionen standardmäßig eine Veraltetkeitswarnung C4996: Diese Funktion oder Variable ist möglicherweise unsicher. Erwägen Sie stattdessen die Verwendung safe_function
. Verwenden Sie _CRT_SECURE_NO_WARNINGS
zum Deaktivieren der Deaktivierung . Es wird empfohlen, den Quellcode so zu ändern, dass er von safe_function
der Warnmeldung vorgeschlagen wird. Die sichereren Funktionen schreiben nicht mehr Zeichen als die angegebene Puffergröße. Weitere Informationen finden Sie unter _itoa_s
, _itow_s
Funktionen.
Um diese Funktionen ohne Die Veraltetkeitswarnung zu verwenden, definieren Sie das _CRT_SECURE_NO_WARNINGS
Präprozessormakro, bevor Sie CRT-Header einschließen. Sie können sie definieren, indem Sie dem cl
Befehl die /D_CRT_SECURE_NO_WARNINGS
Compileroption hinzufügen. Definieren Sie andernfalls das Makro in den Quelldateien. Wenn Sie vorkompilierte Kopfzeilen verwenden, definieren Sie das Makro oben im vorkompilierten Header mit der Datei pch.h
(stdafx.h
in Visual Studio 2017 und früher). Um das Makro in Ihrem Quellcode zu definieren, verwenden Sie eine #define
Direktive, bevor Sie einen CRT-Header einschließen, wie in diesem Beispiel:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdlib.h>
In C++ verfügen diese Funktionen über Vorlagenüberladungen, die ihre sichereren Entsprechungen aufrufen. Weitere Informationen finden Sie unter Secure Template Overloads.
Standardmäßig ist der globale Zustand dieser Funktionen auf die Anwendung festgelegt. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der CRT.
Die POSIX-Namen itoa
, ltoa
und ultoa
existieren als Aliase für die _itoa
, _ltoa
und _ultoa
Funktionen. Die POSIX-Namen sind veraltet, da sie nicht den implementierungsspezifischen globalen Funktionsnamenkonventionen von ISO C entsprechen. Standardmäßig verursachen diese Funktionen die Veraltetkeitswarnung C4996: Der POSIX-Name für dieses Element ist veraltet. Verwenden Sie stattdessen den ISO C- und C++-konformen Namen: new_name
. Es wird empfohlen, den Quellcode so zu ändern, dass die sichereren Versionen dieser Funktionen, _itoa_s
, , _ltoa_s
oder _ultoa_s
. Weitere Informationen finden Sie unter _itoa_s
, _itow_s
Funktionen.
Für die Portabilität von Quellcode können Sie die POSIX-Namen in Ihrem Code beibehalten. Wenn Sie diese Funktionen ohne die Warnung "Veraltet" verwenden möchten, definieren Sie sowohl die Makros als _CRT_SECURE_NO_WARNINGS
auch die _CRT_NONSTDC_NO_WARNINGS
Vorprozessormakros, bevor Sie CRT-Header einschließen. Sie können sie definieren, indem Sie dem cl
Befehl die /D_CRT_SECURE_NO_WARNINGS
Optionen und /D_CRT_NONSTDC_NO_WARNINGS
Compileroptionen hinzufügen. Definieren Sie andernfalls die Makros in Den Quelldateien. Wenn Sie vorkompilierte Kopfzeilen verwenden, definieren Sie die Makros oben in der vorkompilierten Kopfzeile. Um die Makros im Quellcode zu definieren, verwenden #define
Sie Direktiven, bevor Sie einen CRT-Header einschließen, wie in diesem Beispiel:
#define _CRT_NONSTDC_NO_WARNINGS 1
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdlib.h>
Maximale Konvertierungsanzahl von Makros
Damit Sie sichere Puffer für Konvertierungen erstellen können, enthält das CRT einige praktische Makros. Diese Makros definieren die Größe des Puffers, der erforderlich ist, um den längsten möglichen Wert jedes ganzzahligen Typs zu konvertieren, einschließlich des Null-Endzeichens und des Zeichenzeichens für mehrere allgemeine Basisen. Um sicherzustellen, dass der Konvertierungspuffer groß genug ist, um eine Konvertierung in der angegebenen Basis radix
zu erhalten, verwenden Sie eines dieser definierten Makros, wenn Sie den Puffer zuweisen. Mithilfe der Makros können Sie Pufferüberlauffehler vermeiden, wenn Sie integrale Typen in Zeichenfolgen konvertieren. Diese Makros werden definiert, wenn Sie entweder "stdlib.h" oder "wchar.h" in Ihre Quelle einschließen.
Um eines dieser Makros in einer Zeichenfolgenkonvertierungsfunktion zu verwenden, deklarieren Sie den Konvertierungspuffer des entsprechenden Zeichentyps, und verwenden Sie den Makrowert für den ganzzahligen Typ und die Basis als Pufferdimension. In dieser Tabelle sind die Makros aufgeführt, die für jede Funktion für die aufgelisteten Basisen geeignet sind:
Functions | Basis | Makros |
---|---|---|
_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 |
In diesem Beispiel wird ein Konvertierungsanzahlmakro verwendet, um einen Puffer zu definieren, der groß genug ist, um eine unsigned long long
in Base 2 enthaltende Puffer zu definieren:
#include <wchar.h>
#include <iostream>
int main()
{
wchar_t buffer[_MAX_U64TOSTR_BASE2_COUNT];
std:wcout << _ui64tow(0xFFFFFFFFFFFFFFFFull, buffer, 2) << std::endl;
}
Mapping generischer Textroutinen
Tchar.h -Routine |
_UNICODE und _MBCS nicht definiert |
_MBCS definiert |
_UNICODE definiert |
---|---|---|---|
_itot |
_itoa |
_itoa |
_itow |
_ltot |
_ltoa |
_ltoa |
_ltow |
_ultot |
_ultoa |
_ultoa |
_ultow |
_i64tot |
_i64toa |
_i64toa |
_i64tow |
_ui64tot |
_ui64toa |
_ui64toa |
_ui64tow |
Anforderungen
Routine | Erforderlicher Header |
---|---|
itoa , ltoa ultoa |
<stdlib.h> |
_itoa , , _ltoa _ultoa , , _i64toa _ui64toa |
<stdlib.h> |
_itow , , _ltow _ultow , , _i64tow _ui64tow |
<stdlib.h> oder <wchar.h> |
Diese Funktionen und Makros sind microsoftspezifisch. Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Beispiel
In diesem Beispiel wird die Verwendung einiger ganzzahliger Konvertierungsfunktionen veranschaulicht. Beachten Sie die Verwendung des _CRT_SECURE_NO_WARNINGS
Makros zum Stillen der Warnung 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)