如何将二进制转换为八进制、十进制、十六进制
来源:互联网 发布:知乎便宜的女生手链 编辑:程序博客网 时间:2024/04/27 19:09
值得注意的是,存放二进制的数组最后一位才是二进制的第一位,例如:char bin[5]=”1100”,那么bin[3] 才是二进制的第一位.
1.二进制–>八进制
二进制转换为八进制是非常简单的,因为每三个二进制就是一位八进制.如果不足三位二进制则补0.
例如: 10101 –>010 101 –>25
1101 –> 001 101 –> 15
思路有了,接下来就是把思路转换为代码写出来即可.
代码如下:
long long BinToOct(char* bin){ long long oct = 0; //八进制 char* b = bin; int a = 0, p = 0; int i = 0, iLen = 0, k = 0; while (*b++) ++iLen; //计算二进制的长度 while (iLen--) { a += powl(2, k++) * (bin[iLen] - '0'); if (k % 3 == 0) //每三位二进制就是一位八进制(a就是一位八进制) { oct += powl(10, p++)*a; a = 0; k = 0; } }//如果最后没有构成三位二进制,则不会进入到if语句,也就是会少加一次,这里要补回来 return oct += powl(10, p++)*a;;}
注意:这个函数最大支持57位2进制的转换
2.二进制 –> 十进制
这个就太简单了,直接求权值和就行了
long long BinToDec(char* bin){ long long dec = 0; char* b = bin; int iLen = 0, p = 0; while (*b++) ++iLen; while (iLen) dec += powl(2, p++)*(bin[--iLen] - '0'); return dec;}
注意:最大支持63位2进制的转换
3.二进制 –> 十六进制
这个的思路和八进制一样,只不过这里是4个为一组
void BinToHex(char* bin, char* hex, int n = 20){ char a[17] = "0123456789ABCDEF"; char* temp = (char*)malloc(n); memset(temp, 0, n); char* b = bin; int iLen = 0; int i = 0, k = 0, q = 0; while (*b++) ++iLen; while (iLen) { q += powl(2, k++)*(bin[--iLen] - '0'); if (k % 4 == 0) { //假设第一组二进制位1010,所以q=10,a[10] == 'A' temp[i++] = a[q]; q = 0; k = 0; } } if ((i % 4 && q) || i == 0)//防止k!=4漏加了一个 temp[i++] = a[q]; k = 0; while (i) hex[k++] = temp[--i];//反转过来 free(temp);}
参数n = 20 是缺省值,C++才支持,为什么我要这样写呢?因为二进制和十六进制都是用数组保存的,所以,它们之间的转换没有限制,所以我用了动态分配内存,而大小就是传进来的n.
0 0
- 如何将二进制转换为八进制、十进制、十六进制
- 如何将八进制转换为二进制、十进制、十六进制
- 如何将十进制转换为二进制、八进制、十六进制
- 如何将十六进制转换为、二进制、八进制、十进制
- 将十进制转化为二进制、八进制、十六进制
- 十进制负数转换为二进制、八进制、十六进制
- 十进制转换为二进制、八进制、十六进制。
- 十进制转换为二进制、八进制、十六进制
- 算法:十进制转换为十六进制,二进制,八进制
- 十进制转换为二进制、八进制、十六进制程序
- 十进制负数转换为二进制、八进制、十六进制
- 十进制负数转换为二进制、八进制、十六进制
- Java十进制转换为二进制、八进制、十六进制
- 二进制/八进制/十进制/十六进制,如何转换
- 二进制、八进制、十进制、十六进制转换
- pycharm环境下进制转换-将十进制数转换为二进制、八进制、十六进制
- 下列代码可以将十进制转换为二进制、八进制和十六进制
- 将十进制转换为二进制和十六进制
- 策略模式
- SAE中创建数据表
- IOS设计模式之装饰器模式
- Linux用户配置文件和管理文件
- gson相关封装解析
- 如何将二进制转换为八进制、十进制、十六进制
- Tribon建工程大致过程
- Struts项目目录及注意点
- 安全类网站推荐
- ubuntu14.04 theano nvcc compiler not found on $PATH
- 如何区分:Request中getContextPath、getServletPath、getRequestURI、request.getRealPath
- 详细说说select poll epoll
- Linux下第一个简单的socket编程
- myeclipse2015ci最高只适应spring3.1