Преобразование числа в строку

Преобразовать целое число в C-строку позволяют следующие функции:

  • _itoa() и _itoa_s() — преобразуют число типа int в C-строку. Прототипы функций:
#include <cstdlib> /* или #include <stdlib.h> */
char *_itoa(int val, char *dest, int radix);
errno_t _itoa_s(int val, char *dest, size_t size, int radix);

В параметре val указывается число, в параметре dest — указатель на символьный массив, в который будет записан результат, в параметре size — максимальный размер символьного массива dest, а в параметре radix — система счисления (2, 8, 10 или 16). Пример использования функции _itoa_s():

char str[100] = {0};
int x = 255;
_itoa_s(x, str, 100, 10);
std::cout << str << std::endl;  // 255

Пример вывода двоичного, восьмеричного и шестнадцатеричного значений:

char str[100] = {0};
// Двоичное значение
std::cout << _itoa(100, str, 2) << std::endl;  // 1100100
// Восьмеричное значение
std::cout << _itoa(10, str, 8) << std::endl;   // 12
// Шестнадцатеричное значение
std::cout << _itoa(255, str, 16) << std::endl; // ff
  • _ltoa() и _ltoa_s() — преобразуют число типа long в C-строку. Прототипы функций:
#include <cstdlib> /* или #include <stdlib.h> */
char *_ltoa(long val, char *dest, int radix);
errno_t _ltoa_s(long val, char *dest, size_t size, int radix);

Пример:

char str[100] = {0};
long x = 255;
_ltoa_s(x, str, 100, 10);
std::cout << str << std::endl;               // 255
std::cout << _ltoa(x, str, 16) << std::endl; // ff
  • _ultoa() и _ultoa_s() — преобразуют число типа unsigned long в C-строку. Прототипы функций:
#include <cstdlib> /* или #include <stdlib.h> */
char *_ultoa(unsigned long val, char *dest, int radix);
errno_t _ultoa_s(unsigned long val, char *dest, size_t size,
                 int radix);

Пример:

char str[100] = {0};
unsigned long x = 255;
_ultoa_s(x, str, 100, 10);
std::cout << str << std::endl;                // 255
std::cout << _ultoa(x, str, 16) << std::endl; // ff
  • _i64toa() и _i64toa_s() — преобразуют число типа __int64 в C-строку. Прототипы функций:
#include <cstdlib> /* или #include <stdlib.h> */
char *_i64toa(__int64 val, char *dest, int radix);
errno_t _i64toa_s(__int64 val, char *dest, size_t size,
                  int radix);

Пример:

char str[100] = {0};
__int64 x = 255;
_i64toa_s(x, str, 100, 10);
std::cout << str << std::endl;                 // 255
std::cout << _i64toa(x, str, 16) << std::endl; // ff
  • _ui64toa() и _ui64toa_s() — преобразуют число типа unsigned __int64 в C-строку. Прототипы функций:
#include <cstdlib> /* или #include <stdlib.h> */
char *_ui64toa(unsigned __int64 val, char *dest, int radix);
errno_t _ui64toa_s(unsigned __int64 val, char *dest, size_t size,
                   int radix);

Пример:

char str[100] = {0};
unsigned __int64 x = 255;
_ui64toa_s(x, str, 100, 10);
std::cout << str << std::endl;                  // 255
std::cout << _ui64toa(x, str, 16) << std::endl; // ff

Преобразовать значения элементарных типов в C-строку можно с помощью функции sprintf(). Существует также функция _sprintf_l(), которая позволяет дополнительно задать локаль. Прототипы функций:

#include <cstdio> /* или #include <stdio.h> */
int sprintf(char *buf, const char *format, ...);
int _sprintf_l(char *buf, const char *format, _locale_t locale, ...);

В параметре format указывается строка специального формата. Внутри этой строки можно указать обычные символы и спецификаторы формата, начинающиеся с символа %. Спецификаторы формата совпадают со спецификаторами, используемыми в функции printf() (см. разд. 2.9). Вместо спецификаторов формата подставляются значения, указанные в качестве параметров. Количество спецификаторов должно совпадать с количеством переданных параметров. Результат записывается в буфер, адрес которого передается в первом параметре (buf). В качестве значения функция возвращает количество символов, записанных в символьный массив. Пример преобразования целого числа в C-строку:

char buf[50] = "";
int x = 100, count = 0;
count = std::sprintf(buf, "%d", x);
std::cout << buf << std::endl;      // 100
std::cout << count << std::endl;    // 3

Функция sprintf() не производит никакой проверки размера буфера, поэтому возможно переполнение буфера. Вместо функции sprintf() следует использовать функцию sprintf_s() или _sprintf_s_l(). Прототипы функций:

#include <cstdio> /* или #include <stdio.h> */
int sprintf_s(char *buf, size_t sizeInBytes, const char *format, ...);
int _sprintf_s_l(char *buf, size_t sizeInBytes, const char *format,
                 _locale_t locale, ...);

Параметры buf и format аналогичны параметрам функции sprintf(). В параметре sizeInBytes указывается размер буфера. В качестве значения функции возвращают количество символов, записанных в символьный массив. Пример преобразования вещественного числа в C-строку:

char buf[50] = "";
int count = 0;
double pi = 3.14159265359;
count = sprintf_s(buf, 50, "%.2f", pi);
std::cout << buf << std::endl;      // 3.14
std::cout << count << std::endl;    // 4
_locale_t locale = _create_locale(LC_NUMERIC, "dutch");
_sprintf_s_l(buf, 50, "%.3f", locale, pi);
std::cout << buf << std::endl;      // 3,142
_free_locale(locale);

Учебник C++ (MinGW-W64)
Учебник C++ (MinGW-W64) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов