十进制转二进制 八进制 十六进制的代码
时间:2010-07-05
来源:互联网
- #include <stdio.h>
- #define JINZHI 16
-
- int main(){
-
- int num = 982;
- int i=0;
- int res[100];
- while(num>JINZHI){
- res[i] = num%JINZHI;
- num = num/JINZHI;
- i++;
- }
- if(num !=0){
- res[i]=num;
- i++;
- }
- for(i=i-1;i>=0;i--){
- if(JINZHI == 16){
- switch(res[i]){
- case 10:
- printf("A");
- break;
- case 11:
- printf("B");
- break;
- case 12:
- printf("C");
- break;
- case 13:
- printf("D");
- break;
- case 14:
- printf("E");
- break;
- case 15:
- printf("F");
- break;
- default:
- printf("%d",res[i]);
- break;
- }
- }else
- printf("%d",res[i]);
- }
- printf("\n");
- }
多谢多谢!
作者: bladmin 发布时间: 2010-07-05
支持一下。另外建议楼主看看strtol和strtoul这两个库函数,可以把你的2进制、8进制、16进制的字符串数字转回数值型的。当然它还可以转2到36进制的任何一种进制到数值型。
作者: 没本 发布时间: 2010-07-05
本帖最后由 没本 于 2010-07-05 23:52 编辑
如果只是转成2,8,16进制,直接用右移就可以了,不必做除法。另外查表比case要快速。
复制代码
如果只是转成2,8,16进制,直接用右移就可以了,不必做除法。另外查表比case要快速。
- $ cat jz.c
- #include <stdio.h>
- #include <stdlib.h>
- #include <errno.h>
-
- const int DGSHIFT[] = {0,0,1,0,0,0,0,0,3,0,0,0,0,0,0,0,4};
- const int N2C[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
-
- int main(int argc, char ** argv)
- {
- unsigned long num;
- int i, base, digimask, digishift;
- char * e, outstr[36]= {0};
- if( argc<3 )
- {
- perror( "Usage: jz num toBase[=2,8,16]" );
- return -1;
- }
-
- num = strtoul( argv[1], &e, 10 );
- if( errno == ERANGE || (errno != 0 && num == 0) )
- {
- perror( "strtol" );
- return -2;
- }
-
- base = atoi( argv[2] );
- if( base != 2 && base != 8 && base != 16 )
- {
- perror( "base" );
- return -3;
- }
-
- if( 0==num )
- {
- puts( "0" );
- return 0;
- }
-
- digishift = DGSHIFT[base];
- digimask = base-1;
- for( i=sizeof(outstr)-2; num; i--, num>>=digishift )
- outstr[i] = N2C[ num&digimask ];
- puts( outstr+i+1 );
- return 0;
- }
-
- $ gcc jz.c -o jz
- $ ./jz 33 16
- 21
- $ ./jz 30 16
- 1E
- $ ./jz 30 8
- 36
- $ ./jz 30 2
- 11110
作者: 没本 发布时间: 2010-07-05
回复 没本
,大侠,最近兴致真高,每贴必回代码 ,下次直接问你一个项目。。。。让您老给直接写出来。

作者: peidright 发布时间: 2010-07-05
回复 peidright
3、5分钟写不出来的代码,我会放弃的,你不用问项目了,呵呵。
3、5分钟写不出来的代码,我会放弃的,你不用问项目了,呵呵。
作者: 没本 发布时间: 2010-07-05
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28