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

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

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

При составлении программ часто возникает задача получения данных, например, введенных в поле редактирования в числовой форме и вывод результата в текстовое поле.
Число, которое принимает участие в вычислительных процедурах, должно быть представлено в виде строки символов, понятных пользователю, для вывода на экран.
Например, число 235 состоит из трех символов — ‘2’, ‘3’, ‘5’.
Целью рассмотрения данной задачи является приведение символьной строки к соответствующему ей числовому виду.
Для этого нужно разбить символьную строку на значащие разряды и выбрать цифры, соответствующие каждому значащему разряду.

Каждый символ цифры имеет соответствующий ему код в базовой таблице кодировки:

Символ цифры Десятичный код Шестнадцатеричный код Двоичный код
0 48 0x30 0011 0000
1 49 0x31 0011 0001
2 50 0x32 0011 0010
3 51 0x33 0011 0011
4 52 0x34 0011 0100
5 53 0x35 0011 0101
6 54 0x36 0011 0110
7 55 0x37 0011 0111
8 56 0x38 0011 1000
9 57 0x39 0011 1001

В соответствии с приведенной таблицей, значащая часть каждого символа цифры содержится в младшей тетраде битов (младших четырех разрядах). Для получения цифры, соответствующей символу, достаточно произвести операцию:
n = s & 0x0F;
где n — значащая цифра, s — символ цифры. Маска 0x0F позволяет оставить только младшие 4 значащих разряда. Старшие 4 разряда становятся равны 0.

При решении обратной задачи — представления числа в виде текстовой строки — каждая цифра значащего разряда преобразуется в соответствующий ей символ с помощью операции:
s = n | 0x30;
Указанная операция добавляет двоичное значение 0011 в старшие 4 разряда, тем самым формируя код символа из соответствующей значащей цифры.

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

#include
using namespace std;
// Функция преобразования строки в число
int StrToInt( char *s)
int temp = 0; // число
int i = 0;
int sign = 0; // знак числа 0- положительное, 1 — отрицательное
if (s[i] == ‘-‘ )
sign = 1;
i++;
>
while (s[i] >= 0x30 && s[i] temp = temp + (s[i] & 0x0F);
temp = temp * 10;
i++;
>
temp = temp / 10;
if (sign == 1)
temp = -temp;
return (temp);
>
// Функция преобразования числа в строку
char * IntToStr( int n)
char s[40], t, *temp;
int i, k;
int sign = 0;
i = 0;
k = n;
if (k <0)
sign = 1;
k = -k;
>
do t = k % 10;
k = k / 10;
s[i] = t | 0x30;
i++;
> while (k>0);
if (sign == 1)
s[i] = ‘-‘ ;
i++;
>
temp = new char [i];
k = 0;
i—;
while (i >= 0) temp[k] = s[i];
i—; k++;
>
temp[k] = ‘\0’ ;
return (temp);
>
// Проверка выполнения
int main()
int num;
char s[40], *n;
system( «chcp 1251» );
system( «cls» );
cout cin.getline(s, 80);
num = StrToInt(s);
cout num = num + 1;
n = IntToStr(num);
cout cin.get();
return 0;
>

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

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

Комментариев к записи: 15

Как конвертировать символ в цифру?

Есть переменная типа string , в неё записывается строка, введённая пользователем с клавиатуры. Нужно посчитать сумму всех цифр в этой строке. Проблема в том, что не удаётся перевести символьную цифру в цифровую цифру. Пробовал юзать функцию atoi , но она выдаёт неправильный результат. Мой код:

string s; //code code. cin>>s; //code code. for(int i=0;i47 && (int)s[i] <58) < count++; sum+=atoi(&s[i]); >> 

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

team

В общем обычные числы, от 0 до 9, но записаны они как символы, как их перевести в числа? Обратную операцию знаю, а как так сделать хз. При обычном переводе, т е пусть с=’1′, а а-числовая переменная. Если просто сделать а=с, то он выдает мол а как число равно 49(ну или как то так, в общем не 1). Как преобразовать символ в число?

16 Oct 2015 в 09:34 #2

Отнять потом 48

16 Oct 2015 в 09:36 #3

16 Oct 2015 в 09:37 #4

Bloodnaix сказал(а):↑
Отнять потом 48
Нажмите, чтобы раскрыть.

Лучше все-таки ‘0’, не учи его извращениям)

16 Oct 2015 в 09:47 #5

Поняха сказал(а):↑

В общем обычные числы, от 0 до 9, но записаны они как символы, как их перевести в числа? Обратную операцию знаю, а как так сделать хз. При обычном переводе, т е пусть с=’1′, а а-числовая переменная. Если просто сделать а=с, то он выдает мол а как число равно 49(ну или как то так, в общем не 1). Как преобразовать символ в число?

Нажмите, чтобы раскрыть.

1=49, 2=50 по таблице символов ASCII, я не сильный спец, но думаю что-то типо этого

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

Нередко в программах встречается ситуация, когда надо преобразовать число в строку или строку в число. Для этой цели в стандартной библиотеке языка С определены функции 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; >

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

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