Bagikan melalui


itoa, , _itoaltoa, _ltoa, ultoa, _ultoa, _i64toa, _ui64toa, _itow, _ltow, , _ultow, , _i64tow_ui64tow

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, , _ltoadan _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 itoaPOSIX , ltoa, dan ultoa ada sebagai alias untuk _itoafungsi , , _ltoadan _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_satau _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, , ltoaultoa <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)

Lihat juga

Konversi data
_itoa_s, _itow_s fungsi