#include <stdio.h>
#include <string.h>
#include <math.h>
void conver(char arr[])
{
int i, j = 0, k = 0, sum = 0, n = strlen(arr);
int num[100];
for (i = 0; i < n; i++)
{
switch (arr[i])
{
case 'A':num[j++] = 10;
break;
case 'B':num[j++] = 11;
break;
case 'C':num[j++] = 12;
break;
case 'D':num[j++] = 13;
break;
case 'E':num[j++] = 14;
break;
case 'F':num[j++] = 15;
break;
default:num[j++] = (int)(arr[i] - '0');
break;
}
}
for (i = n - 1; i >= 0; i--)
sum += num[i] * pow(16, n - 1 - i);
printf("转换结果:\n%d", sum);
}
int main()
{
char arr[10];
printf("请输入十六进制数:\n");
gets(arr);
conver(arr);
return 0;
}
这个是C语言的函数,其实C++已经有这种函数的封装了,那就是stoi,其中第一项是需要变换的字符串,第二项是起始索引,第三项是是进制可以 8、16、10.
inline int stoi(const string& _Str, size_t *_Idx = nullptr,
int _Base = 10)
{ // convert string to int
int& _Errno_ref = errno; // Nonzero cost, pay it once
const char *_Ptr = _Str.c_str();
char *_Eptr;
_Errno_ref = 0;
const long _Ans = _CSTD strtol(_Ptr, &_Eptr, _Base);
if (_Ptr == _Eptr)
_Xinvalid_argument("invalid stoi argument");
if (_Errno_ref == ERANGE || _Ans < INT_MIN || INT_MAX < _Ans)
_Xout_of_range("stoi argument out of range");
if (_Idx != nullptr)
*_Idx = (size_t)(_Eptr - _Ptr);
return ((int)_Ans);
}