C语言实现16进制转为10进制

#include 
#include 
#include 
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);
	}

你可能感兴趣的:(C语言,C++,C++剖析)