博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
整型进制转换程序
阅读量:6198 次
发布时间:2019-06-21

本文共 1978 字,大约阅读时间需要 6 分钟。

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,即可得到合理的显示。

转载地址:http://lmjca.baihongyu.com/

你可能感兴趣的文章
shell脚本源码安装tomcat
查看>>
Linux下Tomcat部署web项目
查看>>
变频电源面板上的英文按钮和显示都是什么意思
查看>>
你不得不知的这些海报设计小技巧
查看>>
Java基础_07
查看>>
日结小细节
查看>>
华为手机通讯录丢失如何恢复?快速恢复
查看>>
jQuery图片上传前先在本地预览
查看>>
CENTOS 配置好SVN服务环境后,其他服务器无法访问
查看>>
互联网的春天才刚刚开始
查看>>
看到“java单例模式”脑壳疼,学会这几招分分钟搞定
查看>>
Kafka or RabbitMQ:消息中间件选型深入分析
查看>>
IOS之UI--小实例项目--添加商品和商品名(使用xib文件终结版) + xib相关知识点总结...
查看>>
VRRP 配置
查看>>
【Laravel5】Auth组件重写密码认证方式为MD5加密
查看>>
你应该知道的RPC原理
查看>>
使用工具访问ORACLE数据库(一)
查看>>
我的友情链接
查看>>
AngularJs 中的 $http 请求服务
查看>>
Java23种设计模式案例:命令模式(Command)
查看>>