一、十进制 转换成 n 进制
这里要求 1< n <= 9
转换函数实现如下
//将十进制 dec 转换成 n 进制,结果存在 other中,other在外部分配内存
void Decimal_to_Other(int dec, char *other, int n)
{
//1 < n <= 9
int i=0;
int dec_copy = dec;
char* tmpArray = new char[64];
while(dec_copy != 0){
tmpArray[i] = dec_copy%n+'0';
dec_copy /= n;
i++;
} //n进制的串的高位 保存在 tmpArray的地位,
//如 6,二进制保存为tmpArray[0~2] = {0,1,1}
int len = i; //n进制串长
for(i=0;i
other[i] = tmpArray[len-i-1];
} //other[0~2]= {1,1,0} 这就是结果
other[len] = '/0';
delete[] tmpArray;
}
调用如下:
CString szNumber;
char* bin = new char[64]; //转化成二进制
Decimal_to_Other(m_Decimal,bin,2);
szNumber.Format("%s",bin);
AfxMessageBox(szNumber);
char* octal = new char[64]; //转化成八进制
Decimal_to_Other(m_Decimal,octal,8);
szNumber.Format("%s",octal);
AfxMessageBox(szNumber);
二、十进制 转换成 十六进制
转换函数如下
//hex 在外部分配空间
void Decimal_to_Hex(int dec, char *hex)
{
int i=0,flag;
int dec_copy = dec;
char* tmpArray = new char[64];
while(dec_copy != 0){
flag = dec_copy%16;
switch(flag){
case 10:
tmpArray[i] = 'A';
break;
case 11:
tmpArray[i] = 'B';
break;
case 12:
tmpArray[i] = 'C';
break;
case 13:
tmpArray[i] = 'D';
break;
case 14:
tmpArray[i] = 'E';
break;
case 15:
tmpArray[i] = 'F';
break;
default:
tmpArray[i] = flag+'0';
break;
}
dec_copy /= 16;
i++;
}
int len = i; //n进制串长
for(i=0;i
hex[i] = tmpArray[len-i-1];
}
hex[len] = '/0';
delete[] tmpArray;
}
调用如下:
CString szNumber;
char* hex = new char[64]; //转化成十六进制
Decimal_to_Hex(m_Decimal,hex);
szNumber.Format("%s",hex);
AfxMessageBox(szNumber);
三、二进制 转换成 十进制
int Binary_to_Decimal(CString szBin){
int len = szBin.GetLength(); //二进制串长
char* str = new char[len]; //存放串
double result = 0.0; //结果
strcpy(str,szBin.GetBuffer(0));
for(int i=0;i
if(str[i] == '1'){
result += pow(2,len-i-1); //计算 2 的 len-i 次方,并加入到最终结果中
continue;
}
else if(str[i] == '0'){
}
else{
AfxMessageBox("输入二进制串有误!");
return 0;
}
}
return (int)result;
}
调用如下:
CString szBinary = "101101101";
int decimal;
CString szDecimal;
decimal = Binary_to_Decimal(szBinary);
szDecimal.Format("十进制 结果为 %d",decimal);
AfxMessageBox(szDecimal);
四、八进制 转换成 十进制
int Octal_to_Decimal(CString szOct){
int len = szOct.GetLength(); //串长
char* str = new char[len]; //存放串
double result = 0.0; //结果
int nOct;
strcpy(str,szOct.GetBuffer(0));
for(int i=0;i
if(str[i] == '0'){
nOct = 0;
}
else if(str[i] == '1'){
nOct = 1;
}
else if(str[i] == '2'){
nOct = 2;
}
else if(str[i] == '3'){
nOct = 3;
}
else if(str[i] == '4'){
nOct = 4;
}
else if(str[i] == '5'){
nOct = 5;
}
else if(str[i] == '6'){
nOct = 6;
}
else if(str[i] == '7'){
nOct = 7;
}
else{
AfxMessageBox("输入八进制串有误!");
return 0;
}
result += (nOct*pow(8,len-i-1));
//CString msg;msg.Format("nOct = %d pow = %f result = %f",nOct,pow(8,len-i-1),result);
//AfxMessageBox(msg);
}
//delete[] str;
return (int)result;
}
调用如下:
CString szOctal = "1721";
int decimal;
CString szDecimal;
decimal = Octal_to_Decimal(szOctal);
szDecimal.Format("十进制 结果为 %d",decimal);
AfxMessageBox(szDecimal);
五、十六进制 转换成 十进制
int Hex_to_Decimal(CString szHex){
int len = szHex.GetLength(); //串长
char* str = new char[len]; //存放串
double result = 0.0; //结果
int nHex;
strcpy(str,szHex.GetBuffer(0));
for(int i=0;i
if(str[i] == '0'){
nHex = 0;
}
else if(str[i] == '1'){
nHex = 1;
}
else if(str[i] == '2'){
nHex = 2;
}
else if(str[i] == '3'){
nHex = 3;
}
else if(str[i] == '4'){
nHex = 4;
}
else if(str[i] == '5'){
nHex = 5;
}
else if(str[i] == '6'){
nHex = 6;
}
else if(str[i] == '7'){
nHex = 7;
}
else if(str[i] == '8'){
nHex = 8;
}
else if(str[i] == '9'){
nHex = 9;
}
else if(str[i] == 'A'){
nHex = 10;
}
else if(str[i] == 'B'){
nHex = 11;
}
else if(str[i] == 'C'){
nHex = 12;
}
else if(str[i] == 'D'){
nHex = 13;
}
else if(str[i] == 'E'){
nHex = 14;
}
else if(str[i] == 'F'){
nHex = 15;
}
else{
AfxMessageBox("输入十六进制串有误!");
return 0;
}
result += (nHex*pow(16,len-i-1));
}
return (int)result;
}
调用如下:
CString szHex = "1A2B";
int decimal;
CString szDecimal;
decimal = Hex_to_Decimal(szHex);
szDecimal.Format("十进制 结果为 %d",decimal);
AfxMessageBox(szDecimal);
六、利用栈实现
//《数据结构 c语言版》(严蔚敏) P48
void conversion(int N){
InistStack(S);
scanf("%d",dec); //从屏幕读取一个十进制
while(dec != 0){ //转换
Push(S,dec%N);
dec /= N;
}
while(!StackEmpty(S)){ //显示结果
Pop(S,e);
printf("%d",e);
}
}
PS:我实现了一个数值转化的小工具,大家可以下载使用。