Перейти к содержимому

Как преобразовать число в строку в си

  • автор:

Как преобразовать число в строку в си

Нередко может возникнуть необходимость объединить строку с данными других типов, например, числами. Однако объединить строку мы можем только с другой строкой. Поэтому данные других типов вначале необходимо преобразовать в строку. Для преобразования в строку применяется функция std:to_string() , в которую передается преобразуемое значение:

#include #include int main() < unsigned age; std::string message< "Age: " + std::to_string(age)>; std::cout 

Функции преобразования из строки в число

Нередко может вощникнуть противиположная задача — преобразовать строку в другой тип. Есть ряд функций, которые преобразуют строку в число определенного типа:

  • stoi() : преобразует в тип int
  • stol() : в long
  • stoll() : в long long
  • stoul() : в unsigned long
  • stoull() : в unsigned long long
  • stof() : в float
  • stod() : в double
  • stold() : в long double

Все они определены в модуле , работают однотипно и в качестве параметра принимают преобразуемую строку:

std::string str< "123" >; int n< std::stoi(str) >; // n == 123

Преобразование строки в указатель на символы

При необходимости можно преобразовать значение типа string в указатель на символы. Для преобразования в указатель на константную строку применяется метод c_str() :

#include #include int main() < std::string message ; const char* message_ptr = message.c_str(); // преобразуем в указатель std::cout

Для получения указателя также можно применять метод data() , который возвращает указатель на неконстантное значение, если объект string не является константой.

#include #include int main() < std::string message ; char* message_ptr = message.data(); // преобразуем в указатель std::cout

Как int (число) превратить в char (строку) в СИ

Но он выводит на экранчик отладочной платы(Explorer 16) полную белиберду. Библиотека #include не поддерживаеться. В связи с тем что программа пишется в MPLAB для микроконтроллера семейства dsPIC33 (почему то не поддерживает эту библиотеку).

Отслеживать
задан 8 авг 2018 в 12:57
2,907 7 7 золотых знаков 44 44 серебряных знака 87 87 бронзовых знаков
atoi объявлен в
8 авг 2018 в 13:05
@acade поправил
8 авг 2018 в 13:12
А сколько там бит в байте? 256 — это 0 mod 256.
8 авг 2018 в 13:13
@bipll поправил
8 авг 2018 в 13:15
@timob256, stdlib.h тоже не поддерживает?
8 авг 2018 в 13:16

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Первый параметр: число которое необходимо преобразовать в строку (int)

Второй параметр: указатель на строку, куда необходимо записать преобразованное число.

Третий параметр: Система счисления, по которой происходит перевод числа

Использование функции itoa в вашем случае:

int adcResult = 333; // исходное число char adcString[15]; // буфер, в которую запишем число itoa(adcResult, adcString, 10); // вместо третьего параметра // можете написать нужное вам значение // например перевести в 16-ричную с.счисления 

puts_lcd необходимо вызвать следующим образом:

puts_lcd(adcString, strlen(adcString)); 

Преобразовать строку в число (Си)

Задача: Написать и протестировать функцию my_stoi(n, str) , которая преобразует строку десятичных цифр в целое число. Решение: Пусть дана строка s = «46354» . Заведем целое число ( value ), изначально равное нулю. Последовательно обрабатываем символы строки, каждый раз умножаем value на 10 чтобы перейти к следующему десятичному разряду и добавляем очередную цифру. так для этого примера результаты будут формировать следующим образом:

Номер итерации цикла цифра value
1 4 0 *10 + 4 = 4
2 6 4*10 + 6 = 46
3 3 46*10 + 3 = 463
4 5 463*10+5 = 4635
5 4 4635*10 + 4 = 46354

Согласно прототипу, функция должна принимать число ( n ) и формировать строку ( str ). Однако, что если в строке есть символы, отличные от цифр? – При этом надо как-то вернуть ошибку в вызывающий код. Пусть функция возвращает единицу если число успешно распознано и ноль в противном случае. Для этого при обработке строки каждый символ проверяется на принадлежность диапазону [‘0’, ‘9’] . Кроме того, числа могут быть со знаком. Знаки – плюс и минус могут находиться только в начале строки. Эта ситуация обрабатывается – просматривается нулевой символ строки и если это знак – то счетчик символов увеличивается и переменная sign принимает значение ноль или единица. Если же sign хранит единицу – то перед возвратом результата функции полученное число умножается на ( -1 ). Исходный код:

#include #include int my_stoi(int* n, char *s) < const int size_s = strlen(s); int sign = 0; int i = 0; if (s[0] == '+') i = 1; if (s[0] == '-') < i = 1; sign = 1; >int value = 0; for (; i < size_s; ++i) < if (s[i] < '0' || s[i] >'9') < return 0; >int digit = s[i] - '0'; value = value * 10 + digit; > if (sign == 1) value = value * -1; *n = value; > int main() < char str[255]; int n; printf("enter number: "); scanf("%255[^\n]", str); if (my_stoi(&n, str) == 0) < printf("fail"); >else < printf("result by pro-prof.com: %d", n); >return 0; >

Просмотр 0 веток ответов

Преобразование вещественного числа в строку с заданной точностью

В продолжение темы о преобразовании целого числа в строку символов, рассмотрим вопрос преобразования в строку символов вещественного числа.

Перед началом преобразования представим число в нормированной форме, а затем переведем в цифру целую часть полученного числа. Из нормированного числа вычитаем целую часть и умножаем его на 10.

Функция принимает два аргумента:

  • преобразуемое число в формате double ;
  • количество знаков после запятой

Возвращаемое значение — указатель на полученную после преобразования строку.

Реализация на C++

#include
using namespace std;
// Функция преобразования числа в строку
char * DoubleToStr( do uble n, int tolerance)
char s[40], t, *temp;
do uble num;
int i, j;
i = tolerance;
j = 0;
num = n;
if (num <0) // определяем знак числа
num = -num;
s[j] = ‘-‘ ;
j++;
>
do < // преобразуем к нормированной форме (если не меньше 1)
num = num / 10;
i++;
> while (( int )num > 0);
num = num * 10;
while (i > 0)
t = ( int )num; // выделяем цифру, соответствующую целой части
s[j] = t | 0x30;
i—; j++;
if (i == tolerance) < // определяем положение десятичного разделителя
s[j] = ‘.’ ;
j++;
>
num = num — ( do uble )t; // вычитаем из числа целую часть
num = num * 10; // переходим к следующему разряду
>
s[j] = ‘\0’ ;
j++;
temp = new char [j]; // выделяем память под возвращаемую строку
for (i = 0; i temp = s ;
return (temp);
>
int main()
do uble a;
char *s;
cout cin >> a;
for ( int i = 0; i s = DoubleToStr(a, i);
cout >
cin.get(); cin.get();
return 0;
>

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

Результат выполнения

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *