任意进制转换为十进制(十六进制转换为十进制)

 一、十六进制转换为十进制

unsigned long HextoDec(char *hex, int length)
{
    int i;
    unsigned long rslt = 0;
    for (i = 0; i < length; i++)
    {
        switch (hex[i])
        {
            case '0': hex[i] = 0;break;
            case '1': hex[i] = 1;break;
            case '2': hex[i] = 2;break;
            case '3': hex[i] = 3;break;
            case '4': hex[i] = 4;break;
            case '5': hex[i] = 5;break;
            case '6': hex[i] = 6;break;
            case '7': hex[i] = 7;break;
            case '8': hex[i] = 8;break;
            case '9': hex[i] = 9;break;
            case 'a': hex[i] = 10;break;
            case 'A': hex[i] = 10;break;
            case 'b': hex[i] = 11;break;
            case 'B': hex[i] = 11;break;
            case 'c': hex[i] = 12;break;
            case 'C': hex[i] = 12;break;
            case 'd': hex[i] = 13;break;
            case 'D': hex[i] = 13;break;
            case 'e': hex[i] = 14;break;
            case 'E': hex[i] = 14;break;
            case 'f': hex[i] = 15;break;
            case 'F': hex[i] = 15;break;
        default: hex[i] = 0;break;

        }
        rslt += (unsigned long)(hex[i]) << (4 * (length - 1 - i));

    }
    return rslt;
}

 二、C++字符串转换为整数

int stringToInt(char *ptr, unsigned int numCount)
{
    uint32_t temp {};
    std::stringstream tempStream;
    tempStream<<std::string(ptr,numCount);
    tempStream>>temp;
    return temp;
}

三、任意进制转换为十进制

char charToHex( char bChar){
	if ((bChar >= 0x30) && (bChar <= 0x39))
		bChar -= 0x30;
	else if ((bChar >= 0x41) && (bChar <= 0x46))//大写字母
		bChar -= 0x37;
	else if ((bChar >= 0x61) && (bChar <= 0x66))//小写字母
		bChar -= 0x57;
	else bChar = 0xff;
	return bChar;
}

 char hexToChar(char bHex){
	if ((bHex >= 0) && (bHex <= 9))
		bHex += 0x30;
	else if ((bHex >= 10) && (bHex <= 15))//大写字母
		bHex += 0x37;
	else bHex = 0xff;
	return bHex;
}

int numToDec(int numForm)
{
	char Arry[32] = {'\0',};
	printf("请输入数据:");
	scanf_s("%s",Arry,32);
	printf("输入的%d进制数据为:%s\n",numForm,Arry);
	int numDec=0;
	int i = 0;
	while (Arry[i] != '\0')
	{
		i++;
	}
	for (int j = 0; j < i; j++)
	{
		numDec += ((charToHex(Arry[j]) * (pow((float) numForm,  (i-j-1)))));

	}
	
	printf("十进制数为:%d\n", numDec);
	return numDec;
}
发布了142 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_38293453/article/details/104315490