最近写了个实现进制转换的小方法。不过有点缺陷,对大数的转换有问题。请大侠们给点意见。谢谢!
//*************************Numerical value convert*************************
//******************************author:VIG*********************************
//****************************date:2008-2-25*******************************
#include "stdafx.h"
#include <afx.h>
#include "math.h"
/*
* function : OtherNumtoDec(~~)
parameter:
UINT Src_num_value: source type of numerical value,is binary or octal or hex
const TCHAR *src : the numerical value that will convert
return value:converted decimalism
*/
unsigned long double OtherNumtoDec(UINT Src_num_value,const TCHAR *src)
{
TCHAR temp[MAX_PATH];
_tcscpy(temp,src);
static unsigned long double result = 0;
int l = _tcslen(temp);
TCHAR *ptr = temp;
ptr += l - 1;
for(int i = 0;i < l;i++){
switch(Src_num_value) {
case 2://binary to decimalism
result += (*ptr - '0') * (unsigned long double)pow(2,i);
break;
case 8://octal to decimalism
result += (*ptr - '0') * (unsigned long double)pow(8,i);
break;
case 16://hex to decimalism
{
if (*ptr >= '0' && *ptr <= '9') {
result += (*ptr - '0') * (unsigned long double)pow(16,i);
}
if (*ptr >= 'A' && *ptr <= 'F') {
result += (*ptr - 'A' + 10) * (unsigned long double)pow(16,i);
}
if (*ptr >= 'a' && *ptr <= 'f') {
result += (*ptr - 'a' + 10) * (unsigned long double)pow(16,i);
}
}
break;
default:
break;
}
ptr--;
}
return (result);
}
/*
* function : DectoOtherNum(~~)
parameter:
UINT Src_num: the decimalism numerical value that will convert,is binary or octal ot hex
UINT Dest_num_value : source type of numerical value
return value:converted numerical value
*/
TCHAR* DectoOtherNum(UINT Src_num , UINT Dest_num_value)
{
static TCHAR result[MAX_PATH];
TCHAR temp[MAX_PATH];
int i = 0;
int count = 0;
switch(Dest_num_value) {
case 2://to binary
{
do {
temp[i] = Src_num % 2 + '0';
Src_num /= 2;
i++;
count++;
} while(Src_num);
}
break;
case 8://to octal
{
do {
temp[i] = Src_num % 8 + '0';
Src_num /= 8;
i++;
count++;
} while(Src_num % 8);
}
break;
case 16://to hex
{
do {
temp[i] = Src_num % 16;
if (temp[i] > 9) {
temp[i] += 'A' - 10;
}
else
temp[i] += '0';
Src_num /= 16;
i++;
count++;
} while(Src_num % 16);
}
break;
default:
break;
}
for(int n = 0;n < count;n++){
result[n] = temp[i - 1];
i--;
}
result[count] = '/0';
return (result);
}
//end