Перевод из 16 в 10 систему счисления - C (СИ)
Формулировка задачи:
Вот рабочий код программы, он работает только до 8 символов. А если больше 8 символов, то перевод уже неверный. Как решить эту проблему. Заранее, спасибо.
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
#include <stdio.h>
int HEX_TO_DEC(char st[10])
{
int i, s, k, p;
s = 0;
p = strlen(st) - 1;
for (i = 0; st[i] != '\0'; i++)
{
switch (toupper(st[i]))
{
case 'A':
k = 10;
break;
case 'B':
k = 11;
break;
case 'C':
k = 12;
break;
case 'D':
k = 13;
break;
case 'E':
k = 14;
break;
case 'F':
k = 15;
break;
case '1':
k = 1;
break;
case '2':
k = 2;
break;
case '3':
k = 3;
break;
case '4':
k = 4;
break;
case '5':
k = 5;
break;
case '6':
k = 6;
break;
case '7':
k = 7;
break;
case '8':
k = 8;
break;
case '9':
k = 9;
break;
case '0':
k = 0;
break;
}
s = s + k * pow(16, p);
p--;
}
printf("%d", s) ;
return 0;
}
int main()
{
char s[10];
char ch;
printf ( "Plese, enter string: \n");
scanf("%s", s) ;
printf ("\nRezultant: \n");
HEX_TO_DEC(s);
scanf (s);
}Решение задачи: «Перевод из 16 в 10 систему счисления»
textual
Листинг программы
c = toupper(st[i]);
if (c>='A' || c<='F') k = c - 'A' + 10;
else if (c>='0' && c<='9') k = c - '0';
else printf("недопустимая цифра %c", c);
Объяснение кода листинга программы
c- это переменная, которая получает значение символа из строкиst[i].k- это переменная, которая используется для хранения десятичного значения числа.toupper(st[i])- это функция, которая преобразует символst[i]в верхний регистр.if (c>='A' || c<='F')- это условие, которое проверяет, является ли символcбуквой от 'A' до 'F'.k = c - 'A' + 10;- это выражение, которое вычисляет десятичное значение числа, добавляя 10 к разности символаcи 'A'.else if (c>='0' && c<='9')- это условие, которое проверяет, является ли символcчислом от '0' до '9'.k = c - '0';- это выражение, которое вычисляет десятичное значение числа, вычитая '0' из символаc.else printf(недопустимая цифра %c, c);- это условие, которое проверяет, является ли символcнедопустимым числом. Если это так, то выводится сообщение об ошибке.