十六进制转二进制转八进制
来源:互联网 发布:linux命令cat和grep 编辑:程序博客网 时间:2024/05/26 07:27
存4位-取3位方法
十六进制转二进制转八进制的思路
最快的 最便于计算的
是 先转化成2进制,再转换成8进制:
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
A 1010
B 1011
C 1100
D 1101
E 1110
F 1111 搜索
先每四位一组转换成2进制
例如:
3BC24
分别对应到上表 就是:
3 0011
B 1011
C 1100
4 0100
连起来就是:
0011 1011 1100 0100
再按照每三个一组分组:
0 011 101 111 000 100
对应到8进制:
(其实跟上表的前一半是一样的):
0 000 (0*4+0*2+0*1 = 0)
1 001 (0*4+0*2+1*1 = 1)
2 010 (0*4+1*2+0*1 = 2)
3 011 (0*4+1*2+1*1 = 3)
4 100 (1*4+0*2+0*1 = 4)
5 101 (1*4+0*2+1*1 = 5)
6 110 (1*4+1*2+0*1 = 6)
7 111 (1*4+1*2+1*1 = 7)
0 011 101 111 000 100
0__3__5__7__0__4
所以8进制就是35704
C语言程序的实现过程:
#include <stdio.h>#include <string.h>int eight[200000], eight_n, two[400000], two_n;char sixteen[100000];int check(){ int i; for(i = 0; sixteen[i] != '\0' && sixteen[i] != '\n'; i++) { if(sixteen[i] < '0' || (sixteen[i] > '9' && sixteen[i] < 'A') || sixteen[i] > 'Z') { printf("请输入正确的16进制数: "); return 0; } } return 1;}int sixteen_two(){ int i, two_num = 0; for(i = 0; sixteen[i] != '\0' && sixteen[i] != '\n'; i++) //转为2进制字符串放在two { switch(sixteen[i]) { case '0': two[two_num++] = 0; two[two_num++] = 0; two[two_num++] = 0; two[two_num++] = 0; break; case '1': two[two_num++] = 0; two[two_num++] = 0; two[two_num++] = 0; two[two_num++] = 1; break; case '2': two[two_num++] = 0; two[two_num++] = 0; two[two_num++] = 1; two[two_num++] = 0; break; case '3': two[two_num++] = 0; two[two_num++] = 0; two[two_num++] = 1; two[two_num++] = 1; break; case '4': two[two_num++] = 0; two[two_num++] = 1; two[two_num++] = 0; two[two_num++] = 0; break; case '5': two[two_num++] = 0; two[two_num++] = 1; two[two_num++] = 0; two[two_num++] = 1; break; case '6': two[two_num++] = 0; two[two_num++] = 1; two[two_num++] = 1; two[two_num++] = 0; break; case '7': two[two_num++] = 0; two[two_num++] = 1; two[two_num++] = 1; two[two_num++] = 1; break; case '8': two[two_num++] = 1; two[two_num++] = 0; two[two_num++] = 0; two[two_num++] = 0; break; case '9': two[two_num++] = 1; two[two_num++] = 0; two[two_num++] = 0; two[two_num++] = 1; break; case 'A': two[two_num++] = 1; two[two_num++] = 0; two[two_num++] = 1; two[two_num++] = 0; break; case 'B': two[two_num++] = 1; two[two_num++] = 0; two[two_num++] = 1; two[two_num++] = 1; break; case 'C': two[two_num++] = 1; two[two_num++] = 1; two[two_num++] = 0; two[two_num++] = 0; break; case 'D': two[two_num++] = 1; two[two_num++] = 1; two[two_num++] = 0; two[two_num++] = 1; break; case 'E': two[two_num++] = 1; two[two_num++] = 1; two[two_num++] = 1; two[two_num++] = 0; break; case 'F': two[two_num++] = 1; two[two_num++] = 1; two[two_num++] = 1; two[two_num++] = 1; break; default: printf("输入错误信息\n"); } } return two_num; //返回的是二进制个数 }int two_eight(int two_num){//把转换后的8进制逆序存入数组 int i, eight_num = 0; for(i = two_num; i >= 3; ) { eight[eight_num++] = two[--i] + two[--i] * 2 + two[--i] * 4; } if(i == 2) { eight[eight_num++] = two[--i] + two[--i] * 2; } if(i == 1) { eight[eight_num++] = two[--i]; } return eight_num;}void printf_two(int two_num){ int i; printf("2进制: "); for(i = 0; i < two_num; i++) //输出2进制数列 { printf("%d", two[i]); if((i+1) % 4 == 0) printf(" "); } printf("\n");}void printf_eight(int eight_num){//得到八进制的个数 eight_num--; printf("8进制: "); while(eight[eight_num] == 0) eight_num--; for(; eight_num >= 0; eight_num--) { printf("%d", eight[eight_num]); } printf("\n-----------------------------------------------------------------\n");}int main(){ printf("输入16进制数: "); while(gets(sixteen)) { two_n = 0; eight_n = 0; //检验输入的十六进制数是否符合规定 if(check() == 0) continue; two_n = sixteen_two(); //读取十六进制,算出二进制存在two数组和个数two_n //读取二进制个数,算出八进制存在eight数组和返回个数eight_n eight_n = two_eight(two_n); printf_two(two_n); //输出二进制 printf_eight(eight_n); //输出八进制 printf("输入16进制数: "); } return 0;}
1 0
- 二进制、八进制、十六进制[转]
- 十六进制转二进制转八进制
- 十进制转二进制 八进制 十六进制
- 十进制转二进制,八进制,十六进制
- 十进制转二进制,八进制,十六进制(PHP)
- java 进制换转 十进制 转 二进制 八进制 十六进制
- PHP 十进制转二进制,八进制,十六进制
- Java 十进制 转 二进制、八进制、十六进制
- java十进制转二进制、八进制、十六进制
- int型转二进制,八进制,十六进制查表法
- 十进制转二进制,八进制,十六进制(查表法)
- 十进制数转二进制、八进制、十六进制数Java代码
- javascript十进制、二进制、八进制、十六进制转换(转别人的)
- 【转】Oracle中的二进制、八进制、十进制、十六进制相互转换函数
- 关于字符串转二进制、八进制、十进制、十六进制等的函数
- 二进制、八进制、十进制、十六进制之间转换 <转>
- 在c++中int转十六进制八进制二进制字符串
- 十进制转二进制、八进制、十六进制的经典程序
- 掌握Tiles 框架 (一)---Tiles入门和Tiles 框架和体系结构
- 个人分析
- 学校Android客户端共享上网的原理
- python2.7配置matplotlib
- 网页层叠样式表(css+html)
- 十六进制转二进制转八进制
- ImageView的属性及使用相关
- svg文件eclipse中报错解决方法
- 【OA外勤签到】软件免费下载
- finish with non-zero exit value 42
- 根据某一字段值相同合并字符串
- 1858: [Scoi2010]序列操作 线段树
- JS中offsetTopclientTop、scrollTop、offsetTop
- [省选算法]