itoa
, , ltoa
, , _ltoa
, ultoa
, _ultoa
, , _i64toa
, _ui64toa
, _ltow
_itow
, _i64tow
_ultow
, _itoa
_ui64tow
Tamsayıyı dizeye dönüştürür. Bu işlevlerin daha güvenli sürümleri kullanılabilir, bkz _itoa_s
. , _itow_s
işlevleri.
Sözdizimi
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 );
Parametreler
value
Dönüştürülecek sayı.
buffer
Dönüştürmenin sonucunu tutan arabellek.
radix
2-36 aralığında olması gereken dönüştürme value
için kullanılacak taban.
size
Arabelleğin karakter türünün birimleri cinsinden uzunluğu. Bu parametre C++'taki bağımsız değişkenden buffer
çıkarılır.
Dönüş değeri
Bu işlevlerin her biri için buffer
bir işaretçi döndürür. Hata döndürme yok.
Açıklamalar
_itoa
, _ltoa
, _ultoa
, _i64toa
ve _ui64toa
işlevleri, verilen value
bağımsız değişkenin basamaklarını null olarak sonlandırılan bir karakter dizesine dönüştürür ve sonucu (ve için _ui64toa
_i64toa
_itoa
, _ltoa
, ve _ultoa
için 65 karaktere kadar) buffer
depolar. 10'a eşitse ve value
negatifseradix
, depolanan dizenin ilk karakteri eksi işaretidir (-). _itow
, _ltow
, , _ultow
, _i64tow
ve _ui64tow
işlevleri sırasıyla , _ltoa
, _ultoa
, _i64toa
ve _ui64toa
'nin _itoa
geniş karakterli sürümleridir.
Önemli
Bu işlevler, çok küçük bir arabelleğin sonunu yazabilir. Arabellek taşmalarını önlemek için, dönüştürülen basamakların yanı sıra sondaki null karakteri ve bir işaret karakterini barındıracak kadar büyük olduğundan emin olun buffer
. Bu işlevlerin kötüye kullanılması kodunuzda ciddi güvenlik sorunlarına neden olabilir.
Olası güvenlik sorunları nedeniyle bu işlevler varsayılan olarak kullanımdan kaldırma uyarısı C4996'ya neden olur: Bu işlev veya değişken güvenli olmayabilir. Bunun yerine kullanmayı safe_function
göz önünde bulundurun. Kullanımdan kaldırmayı devre dışı bırakmak için kullanın _CRT_SECURE_NO_WARNINGS
. Kaynak kodunuzu uyarı iletisinin safe_function
önerdiğini kullanacak şekilde değiştirmenizi öneririz. Daha güvenli işlevler, belirtilen arabellek boyutundan daha fazla karakter yazmaz. Daha fazla bilgi için bkz_itoa_s
. işlevleri_itow_s
.
Bu işlevleri kullanımdan kaldırma uyarısı olmadan kullanmak için, herhangi bir CRT üst bilgisi eklemeden önce önişlemci makroyu tanımlayın _CRT_SECURE_NO_WARNINGS
. Komutuna /D_CRT_SECURE_NO_WARNINGS
derleyici seçeneğini cl
ekleyerek tanımlayabilirsiniz. Aksi takdirde, makroyu kaynak dosyalarınızda tanımlayın. Önceden derlenmiş üst bilgiler kullanıyorsanız, önceden derlenmiş üst bilgi ekleme dosyasının pch.h
üst kısmındaki makroyu tanımlayın (stdafx.h
Visual Studio 2017 ve önceki sürümlerde). Makroyu kaynak kodunuzda tanımlamak için, bu örnekte olduğu gibi herhangi bir CRT üst bilgisi eklemeden önce bir #define
yönerge kullanın:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdlib.h>
C++'da bu işlevlerin daha güvenli karşılıklarını çağıran şablon aşırı yüklemeleri vardır. Daha fazla bilgi için bkz . Güvenli şablon aşırı yüklemeleri.
Varsayılan olarak, bu işlevlerin genel durumunun kapsamı uygulama olarak belirlenmiştir. Bu davranışı değiştirmek için bkz. CRT'de Genel durum.
POSIX adı itoa
, ltoa
ve ultoa
, ve _ultoa
işlevleri için _itoa
_ltoa
diğer adlar olarak bulunur. POSIX adları, ISO C'nin uygulamaya özgü genel işlev adı kurallarına uymadığından kullanım dışıdır. Varsayılan olarak, bu işlevler kullanımdan kaldırma uyarısı C4996'ya neden olur: Bu öğenin POSIX adı kullanım dışıdır. Bunun yerine ISO C ve C++ uyumlu adını kullanın: new_name
. Kaynak kodunuzu, bu işlevlerin _itoa_s
, , _ltoa_s
veya _ultoa_s
daha güvenli sürümlerini kullanacak şekilde değiştirmenizi öneririz. Daha fazla bilgi için bkz_itoa_s
. işlevleri_itow_s
.
Kaynak kodu taşınabilirliği için POSIX adlarını kodunuzda tutmayı tercih edebilirsiniz. Bu işlevleri kullanımdan kaldırma uyarısı olmadan kullanmak için, CRT üst bilgilerini eklemeden önce hem hem de _CRT_NONSTDC_NO_WARNINGS
_CRT_SECURE_NO_WARNINGS
önişlemci makrolarını tanımlayın. komutuna /D_CRT_SECURE_NO_WARNINGS
ve /D_CRT_NONSTDC_NO_WARNINGS
derleyici seçeneklerini cl
ekleyerek bunları tanımlayabilirsiniz. Aksi takdirde, kaynak dosyalarınızdaki makroları tanımlayın. Önceden derlenmiş üst bilgiler kullanıyorsanız, önceden derlenmiş üst bilgi ekleme dosyasının üst kısmındaki makroları tanımlayın. Kaynak kodunuzda makroları tanımlamak için, bu örnekte olduğu gibi herhangi bir CRT üst bilgisi eklemeden önce yönergeleri kullanın #define
:
#define _CRT_NONSTDC_NO_WARNINGS 1
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdlib.h>
En fazla dönüştürme sayısı makroları
Dönüştürmeler için güvenli arabellekler oluşturmanıza yardımcı olması için CRT bazı kullanışlı makrolar içerir. Bu makrolar, birkaç ortak taban için null sonlandırıcı ve işaret karakteri de dahil olmak üzere her tamsayı türünün mümkün olan en uzun değerini dönüştürmek için gereken arabellek boyutunu tanımlar. Dönüştürme arabelleğinizin tarafından radix
belirtilen tabanda herhangi bir dönüştürme alacak kadar büyük olduğundan emin olmak için, arabelleği ayırırken bu tanımlı makrolardan birini kullanın. Makrolar, integral türlerini dizelere dönüştürdüğünüzde arabellek taşması hatalarını önlemenize yardımcı olur. Bu makrolar, kaynağınıza stdlib.h veya wchar.h eklediğinizde tanımlanır.
Bu makrolardan birini dize dönüştürme işlevinde kullanmak için, uygun karakter türünde dönüştürme arabelleğinizi bildirin ve arabellek boyutu olarak tamsayı türü ve taban için makro değerini kullanın. Bu tabloda, listelenen temeller için her işlev için uygun makrolar listelenir:
İşlevler | kök | Makrolar |
---|---|---|
_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 |
Bu örnekte, 2 tabanında bir arabelleğe sahip olacak kadar büyük bir arabellek tanımlamak için dönüştürme unsigned long long
sayısı makrosunda kullanılır:
#include <wchar.h>
#include <iostream>
int main()
{
wchar_t buffer[_MAX_U64TOSTR_BASE2_COUNT];
std:wcout << _ui64tow(0xFFFFFFFFFFFFFFFFull, buffer, 2) << std::endl;
}
Genel metin yordamı eşlemeleri
Tchar.h olağan |
_UNICODE ve _MBCS tanımlanmadı |
_MBCS tanımlanan |
_UNICODE tanımlanan |
---|---|---|---|
_itot |
_itoa |
_itoa |
_itow |
_ltot |
_ltoa |
_ltoa |
_ltow |
_ultot |
_ultoa |
_ultoa |
_ultow |
_i64tot |
_i64toa |
_i64toa |
_i64tow |
_ui64tot |
_ui64toa |
_ui64toa |
_ui64tow |
Gereksinimler
Yordam | Gerekli başlık |
---|---|
itoa , ltoa , ultoa |
<stdlib.h> |
_itoa , _ltoa , _ultoa , _i64toa , , _ui64toa |
<stdlib.h> |
_itow , _ltow , _ultow , _i64tow , , _ui64tow |
<stdlib.h> veya <wchar.h> |
Bu işlevler ve makrolar Microsoft'a özeldir. Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.
Örnek
Bu örnek, bazı tamsayı dönüştürme işlevlerinin kullanımını gösterir. C4996 uyarısını _CRT_SECURE_NO_WARNINGS
susturmak için makronun kullanıldığına dikkat edin.
// 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)