整型进制转换程序

1. 简述

    实际上,小数也是存在进制转换的,本文主要给出整型的进制转换代码实现。函数原型如下:
    char* ChangeFromDecimal(unsigned int value, int base);
    // value:10进制的数值;base:转化成的进制数;返回值:转化后的进制数,最后还增加了'\0'
    int ChangeToDecimal(char* value, int base);
    // 工作与ChangeFromDecimal相反,将某种进制的字符串表示,转化为int数值

2. 代码实现   

#include <iostream>
#include 
<stack>
using namespace std;

char* ChangeFromDecimal(unsigned int value, int base) {
  
char* result;
  stack
<char> result_stack;
  unsigned 
int tmp;
  result_stack.push('\0');
  
while(value) {
    tmp 
= value % base;
    value 
= value / base;
    result_stack.push(tmp 
< 10 ? (tmp+'0') : (tmp-10+'A'));
  }
  result 
= new char[result_stack.size()];
  tmp 
= 0;
  
while(!result_stack.empty()) {
    result[tmp
++= result_stack.top();
    result_stack.pop();
  }

  
return result;
}

int ChangeToDecimal(char* value, int base) {
  
int result = 0;
  
while(*value != '\0') {
    result 
= result * base;
    result 
+= (*value)<='9'?(*value-'0'):(*value-'A'+10);
    value
++;
  }
  
return result;


int main() {
  
int num = 253;
  
char *result;  
  cout 
<< (result = ChangeFromDecimal(num, 2)) << endl;
  cout 
<< ChangeToDecimal(result, 2<< endl;
  cout 
<< "----------------------------------------" << endl;
  delete []result;
  cout 
<< (result = ChangeFromDecimal(num, 8)) << endl;
  cout 
<< ChangeToDecimal(result, 8<< endl;
  cout 
<< "----------------------------------------" << endl;
  delete []result;
  cout 
<< (result = ChangeFromDecimal(num, 16)) << endl;
  cout 
<< ChangeToDecimal(result, 16<< endl;
  delete []result;
  result 
= 0;
  system(
"PAUSE");
  
return 0;
}

3. 重点说明

    · 对于大于等于10的数字和小于10的数字要分别处理,尤其是'0'-'9'与'A'-'Z'的ASCII码是不连续的。
    · 如果使用参数代替返回值的话,对于char*,要使用char*&,对于int,要使用int*。
    · 由于英文字母有限,base是有限制的,10个数字加上26个字母,最多能够表示的也就是36进制。
    · 最重要的一点是第一个函数将int转化为字符串进制时,一定要将int解释为unsigned int,因为函数中用到了取余运算,如果不解释的话,对于负数,计算后显示会出错的。 而第二个函数却不需要一定返回unsigned int,返回int也可以的,因为其中,只是对数值进行乘法和加法。当然,全部使用unsigned int实际上是最保险的方式,也是最安全的。如果都用unsigned int,第一个函数传入int,就会直接被转化为unsigned int,只要对第二个函数的返回值,强制转化为int,即可得到合理的显示。

posted @ 2011-08-11 22:47  xiaodongrush  阅读(628)  评论(3编辑  收藏  举报