Как перевести число в си
Перейти к содержимому

Как перевести число в си

  • автор:

Как 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)); 

Как перевести число в си

Нередко в программах встречается ситуация, когда надо преобразовать число в строку или строку в число. Для этой цели в стандартной библиотеке языка С определены функции strtol() и snprintf() .

Из строки в число. strtol

Функция strtol() преобразует строку в число типа long int . Функция определена в заголовочном файле stdlib.h и имеет следующий прототип:

long strtol(const char *restrict str, char **restrict str_end, int base);
  • str — строка с числом, которое надо преобразовать в числовой тип. Ключевое слово restrict указывает компилятору оптимизировать код и что никакой другой параметр не будет указывать на адрес данного параметра.
  • str_end — указатель на последний символ строки. Данный параметр можно игнорировать, передавая ему значение NULL
  • base — основание, система исчисления, в которую надо преобразовать данные (значение от 2 до 36).

Результатом функции является преобразованное число типа long .

Например, преобразуем строку в число в десятичной системе:

#include #include int main(void) < const char * str = "24 flowers"; long result = strtol(str, NULL, 10); printf("Result: %ld\n", result); // Result: 24 return 0; >

В примере выше второй параметр функции никак не использовался — мы ему передавали значение NULL , и функция нормально работала. Однако он может быть полезен, если нам надо получить остаток строки, которая идет после числа:

#include #include int main(void) < const char * str = "24 flowers"; char* str_end; long result = strtol(str, &str_end, 10); printf("Result: %ld\n", result); // Result: 24 printf("Rest of the string:%s\n", str_end); // Rest of the string: flowers return 0; >

Из числа в строку. snprintf

Функция snprintf() преобразует число в отформатированную строку. Функция определена в заголовочном файле stdio.h и имеет следующий прототип:

int snprintf(char *restrict str_buffer, size_t buffer_size, const char *restrict format, . );
  • str_buffer — строка, в которую помещается преобразованное число.
  • buffer_size — максимальное количество символов строки. Функция записывает в строку buffer-size — 1 байт и добавляет концевой нулевой байт
  • format — задает формат преобразования в строку.

При успешном преобразовании функция возвращает количество символов, записанных в строку (исключая концевой нулевой байт). При неудачном преобразовании возвращается отрицательное число.

#include int main(void) < int number = 354; char str [10]; snprintf(str, sizeof str, "%d", number); printf("Result: %s\n", str); // Result: 354 return 0; >

При этом строка форматирования может содержать множество параметров:

#include int main(void) < int count = 3; double price = 79.99; char str [50]; snprintf(str, sizeof str, "Count: %d \tPrice: %.2f", count, price); printf("%s\n", str); // Count: 3 Price: 79.99 return 0; >

Как это «перевести в СИ»? Физика.

метры, секунда, килограмм, секунды, метры, наверное литры, секунда, кило. Это сверху вниз. Что делать дальше думаю понятно.

Это значит надо перевести в секунды, метры, килограммы

км — в граммы (0,04км- 4 грамма)
мин-в секунды
тонны — в кг
час-в минуты
см-мм

Help MyУченик (154) 13 лет назад
ссори я ошиблась, км-в метры..
Анна Мастер (1746) ага,я уж заметила..да ничего =) спасибо за ответ все равно =)

перевести в систему интернациональную это значит перевести в основную измерительную единицу. например у тебя 0,04 км это 40 м

0,04км=40м
13,9км=13900м
58,09т=58090кг
3,5ч=12600с
12см=0,12м
3мл=.м куб
40мин=2400с
0,06т=60кг
причем тут кино
Похожие вопросы
Ваш браузер устарел

Мы постоянно добавляем новый функционал в основной интерфейс проекта. К сожалению, старые браузеры не в состоянии качественно работать с современными программными продуктами. Для корректной работы используйте последние версии браузеров Chrome, Mozilla Firefox, Opera, Microsoft Edge или установите браузер Atom.

Системы счисления. Перевод чисел и операции (Си)

Перевод чисел из одной системы счисления в другую на С++

1.1 Перевод целых чисел. Основание меньше 10

#include #include #include #include // добавить функцию read_int_beween struct NumberInSystem < int* digits; int n; int sign; int base; >; void create_number_in_system(struct NumberInSystem* number, int base, int n, int sign) < number->n = n; number->sign = sign; number->base = base; number->digits = malloc(sizeof(int) * n); memset(number->digits, 0, sizeof(int) * n); > int read_base() < int base; while (1) < printf("base: "); scanf("%d", &base); if (base >1 && base <=10) break; printf("base must be in [2, 10]. repeat please\n"); >return base; > void read_number_in_system(struct NumberInSystem* number) < number->base = read_base(); while (1) < printf("number length: "); scanf("%d", &(number->n)); if ((number->n) > 0) break; printf(«length must be more than 0\n»); > number->digits = malloc(sizeof(int) * number->n); (number->digits)[0] = read_int_beween(1, number->base-1); for (int i = 1; i < number->n; ++i) < (number->digits)[i] = read_int_beween(0, number->base-1); > number->sign = 0; > void print_number(struct NumberInSystem number) < if (number.sign == 1) < printf("-"); >for (int i = 0; i < number.n; ++i) < printf("%d", number.digits[i]); >printf(«\n»); > int NumberInSystem_to_int(struct NumberInSystem number) < int value = 0; int power = 1; for (int i = number.n-1; i >= 0; —i) < value += number.digits[i]*power; power = power*number.base; >if (number.sign == 1) value = value * (-1); return value; > struct NumberInSystem int_to_NumberInSystem(int value, int base) < int* buffer = malloc(sizeof(int) * 255); int sign = 0; if (value < 0) < sign = 1; value = value * (-1); >int length = 0; while (value > 0) < buffer[length] = value%base; value = value/base; length++; >struct NumberInSystem number; create_number_in_system(&number, base, length, sign); for (int i = 0; i < length; ++i) < number.digits[i] = buffer[length-i-1]; >free(buffer); return number; > void remove_number(struct NumberInSystem* number) < free(number->digits); > int main()

2 Операции над числами в системах счисления на С++

2.1 Операции с целыми числами

Формулировка задачи:

Своими цифрами в массивах K(m) и L(m) заданы два целых числа в p-ичной системе счисления ( p

Решение: Тут алгоритм точно тот же что для десятичных чисел – в столбик. Отличия следующие:
1) функция проверяет что числа записаны в одинаковой системе счисления;
2) после вычисления суммы разрядов – сумма сравнивается не с 10, а с основанием системы счисления. Вычитается из суммы не 10, а другое основание. Исходный код функции:

void sum(struct NumberInSystem a, struct NumberInSystem b, struct NumberInSystem* result) < if (a.base != b.base) < printf("can't sum numbers in various systems\n"); return; >if (a.n > b.n) < result->n = a.n+1; > else < result->n = b.n+1; > result->digits = malloc(sizeof(int) * (result->n)); int i = a.n-1, j = b.n-1, k = result->n-1; int carry = 0; while (1) < if (i < 0 && j < 0) break; int a_digit = a.digits[i], b_digit = b.digits[j]; if (i < 0) < a_digit = 0; >if (j < 0) < b_digit = 0; >int digit = a_digit + b_digit + carry; if (digit > (a.base-1)) < digit -= a.base; carry = 1; >else < carry = 0; >result->digits[k] = digit; i = i - 1; j = j - 1; k = k - 1; > >

Пример вычисления суммы:

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

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

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