求助贴,这个程序该怎么写比较好啊,用C语言。
写一函数,输入一个十六进制数,输出相应的十进制数。
[解决办法]
long fun (char *str){ int tmp = 0; long sum = 0; for (int i = 0; s[i] != '\0' ; i++) { if (s[i] < '9') tmp = s[i] - '0'; else tmp = s[i] - 'a' + 10; sum = sum * 16 + tmp; } return sum;}
[解决办法]
接收到的数字,从低位到高位按照转换法则,转换....
如:
接收:2AF5
转换: 10997 = 5 * 16^0 + F (15)* 16^1 + A (10)* 16^2 + 2 * 16^3
先倒序,或者从尾部到头部开始 5 * 16^0 , F * 16 ^ 1 = 15 * 16^1
...............第n位,九尾,m * 16 ^( n - 1)
[解决办法]
#include <math.h>
#include <string.h>
long stot(char *p)
{
int len = strlen(p);
double n = 0;
while(*p != '\0')++p;
--p;
for (int i=0; i<len ; i++)
{
if (*p >= 'a' && *p <= 'z')
{
n += (*p - ‘a' + 10) * pow(16.0 , i);
}
else if (*p >= 'A' && *p <= 'Z')
{
n += (*p - 'A' + 10) * pow(16.0 , i);
}
else
{
n += (*p - '0') * pow(16.0 , i);
}
--p;
}
return (long)n;
}
[解决办法]
#include <math.h>#include <string.h>long stot(char *p){ int len = strlen(p); double n = 0; while(*p != '\0')++p; --p; for (int i=0; i<len ; i++) { if (*p >= 'a' && *p <= 'z') { n += (*p - 87) * pow(16.0 , i); } else if (*p >= 'A' && *p <= 'Z') { n += (*p - 55) * pow(16.0 , i); } else { n += (*p - '0') * pow(16.0 , i); } --p; } return (long)n;}