Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mengonversi bilangan bulat menjadi string. Versi fungsi ini yang lebih aman tersedia, lihat _itoa_s
, _itow_s
fungsi.
Sintaks
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
Angka yang akan dikonversi.
buffer
Buffer yang menyimpan hasil konversi.
radix
Basis yang digunakan untuk konversi value
, yang harus berada dalam rentang 2-36.
size
Panjang buffer dalam satuan jenis karakter. Parameter ini disimpulkan dari buffer
argumen di C++.
Nilai hasil
Masing-masing fungsi ini mengembalikan penunjuk ke buffer
. Tidak ada pengembalian kesalahan.
Keterangan
Fungsi _itoa
, , _ltoa
_ultoa
, _i64toa
, dan _ui64toa
mengonversi digit argumen yang diberikan value
ke string karakter yang dihentikan null dan menyimpan hasilnya (hingga 33 karakter untuk _itoa
, , _ltoa
dan _ultoa
, dan 65 untuk _i64toa
dan _ui64toa
) di buffer
. Jika radix
sama dengan 10 dan value
negatif, karakter pertama dari string yang disimpan adalah tanda minus (-). Fungsi _itow
, , _ltow
_ultow
, _i64tow
, dan _ui64tow
masing-masing adalah versi karakter lebar dari _itoa
, , _ltoa
_ultoa
, _i64toa
, dan _ui64toa
, .
Penting
Fungsi-fungsi ini dapat menulis melewati akhir buffer yang terlalu kecil. Untuk mencegah overruns buffer, pastikan bahwa cukup besar untuk menahan digit yang buffer
dikonversi ditambah karakter null berikutnya dan karakter tanda. Penyalahgunaan fungsi-fungsi ini dapat menyebabkan masalah keamanan serius dalam kode Anda.
Karena potensi masalah keamanannya, secara default, fungsi-fungsi ini menyebabkan peringatan penghentian C4996: Fungsi atau variabel ini mungkin tidak aman. Pertimbangkan untuk menggunakan safe_function
sebagai gantinya. Untuk menonaktifkan penghentian, gunakan _CRT_SECURE_NO_WARNINGS
. Kami sarankan Anda mengubah kode sumber untuk menggunakan yang disarankan safe_function
oleh pesan peringatan. Fungsi yang lebih aman tidak menulis lebih banyak karakter daripada ukuran buffer yang ditentukan. Untuk informasi selengkapnya, lihat _itoa_s
, _itow_s
fungsi.
Untuk menggunakan fungsi ini tanpa peringatan penghentian, tentukan _CRT_SECURE_NO_WARNINGS
makro praprosesor sebelum menyertakan header CRT apa pun. Anda dapat menentukannya dengan menambahkan /D_CRT_SECURE_NO_WARNINGS
opsi pengkompilasi ke cl
perintah . Jika tidak, tentukan makro dalam file sumber Anda. Jika Anda menggunakan header yang telah dikommpilasikan sebelumnya, tentukan makro di bagian atas header yang telah dikommpilasikan termasuk file, pch.h
(stdafx.h
di Visual Studio 2017 dan yang lebih lama). Untuk menentukan makro dalam kode sumber Anda, gunakan #define
direktif sebelum Anda menyertakan header CRT apa pun, seperti dalam contoh ini:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdlib.h>
Di C++, fungsi-fungsi ini memiliki kelebihan beban templat yang memanggil rekan-rekan yang lebih aman. Untuk informasi selengkapnya, lihat Mengamankan kelebihan beban templat.
Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubah perilaku ini, lihat Status global di CRT.
Nama itoa
POSIX , ltoa
, dan ultoa
ada sebagai alias untuk _itoa
fungsi , , _ltoa
dan _ultoa
. Nama POSIX tidak digunakan lagi karena tidak mengikuti konvensi nama fungsi global khusus implementasi ISO C. Secara default, fungsi-fungsi ini menyebabkan peringatan penghentian C4996: Nama POSIX untuk item ini tidak digunakan lagi. Sebagai gantinya, gunakan nama konforman ISO C dan C++:new_name
. Kami sarankan Anda mengubah kode sumber Anda untuk menggunakan versi fungsi-fungsi ini yang lebih aman, , _itoa_s
, _ltoa_s
atau _ultoa_s
. Untuk informasi selengkapnya, lihat _itoa_s
, _itow_s
fungsi.
Untuk portabilitas kode sumber, Anda mungkin lebih suka mempertahankan nama POSIX dalam kode Anda. Untuk menggunakan fungsi ini tanpa peringatan penghentian, tentukan _CRT_NONSTDC_NO_WARNINGS
makro praprosesor dan _CRT_SECURE_NO_WARNINGS
sebelum menyertakan header CRT apa pun. Anda dapat menentukannya dengan menambahkan /D_CRT_SECURE_NO_WARNINGS
opsi pengkompilasi dan /D_CRT_NONSTDC_NO_WARNINGS
ke cl
perintah . Jika tidak, tentukan makro dalam file sumber Anda. Jika Anda menggunakan header yang telah dikommpilasikan sebelumnya, tentukan makro di bagian atas header yang telah dikommpilasikan menyertakan file. Untuk menentukan makro dalam kode sumber Anda, gunakan #define
direktif sebelum Anda menyertakan header CRT apa pun, seperti dalam contoh ini:
#define _CRT_NONSTDC_NO_WARNINGS 1
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdlib.h>
Makro jumlah konversi maksimum
Untuk membantu Anda membuat buffer aman untuk konversi, CRT menyertakan beberapa makro yang nyaman. Makro ini menentukan ukuran buffer yang diperlukan untuk mengonversi nilai terpanjang dari setiap jenis bilangan bulat, termasuk terminator null dan karakter tanda, untuk beberapa basis umum. Untuk memastikan bahwa buffer konversi Anda cukup besar untuk menerima konversi apa pun di basis yang ditentukan oleh radix
, gunakan salah satu makro yang ditentukan ini saat Anda mengalokasikan buffer. Makro membantu Anda mencegah kesalahan overrun buffer saat Anda mengonversi jenis integral menjadi string. Makro ini didefinisikan ketika Anda menyertakan stdlib.h atau wchar.h di sumber Anda.
Untuk menggunakan salah satu makro ini dalam fungsi konversi string, deklarasikan buffer konversi Anda dari jenis karakter yang sesuai dan gunakan nilai makro untuk jenis bilangan bulat dan dasar sebagai dimensi buffer. Tabel ini mencantumkan makro yang sesuai untuk setiap fungsi untuk basis yang tercantum:
Fungsi | Radix | Makro |
---|---|---|
_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 |
Contoh ini menggunakan makro jumlah konversi untuk menentukan buffer yang cukup besar untuk berisi unsigned long long
dalam basis 2:
#include <wchar.h>
#include <iostream>
int main()
{
wchar_t buffer[_MAX_U64TOSTR_BASE2_COUNT];
std::wcout << _ui64tow(0xFFFFFFFFFFFFFFFFull, buffer, 2) << std::endl;
}
Pemetaan rutin teks generik
Tchar.h Rutin |
_UNICODE dan _MBCS tidak ditentukan |
_MBCS Didefinisikan |
_UNICODE Didefinisikan |
---|---|---|---|
_itot |
_itoa |
_itoa |
_itow |
_ltot |
_ltoa |
_ltoa |
_ltow |
_ultot |
_ultoa |
_ultoa |
_ultow |
_i64tot |
_i64toa |
_i64toa |
_i64tow |
_ui64tot |
_ui64toa |
_ui64toa |
_ui64tow |
Persyaratan
Rutin | Header yang diperlukan |
---|---|
itoa , , ltoa ultoa |
<stdlib.h> |
_itoa , , _ltoa _ultoa , , _i64toa ,_ui64toa |
<stdlib.h> |
_itow , , _ltow _ultow , , _i64tow ,_ui64tow |
<stdlib.h> atau <wchar.h> |
Fungsi dan makro ini khusus Microsoft. Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Contoh
Sampel ini menunjukkan penggunaan beberapa fungsi konversi bilangan bulat. Perhatikan penggunaan _CRT_SECURE_NO_WARNINGS
makro untuk membungkam peringatan 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)