进制转换方法汇总表
| 原进制 | 转换进制 | 方法1 | 方法2 | 方法3 | 方法4 |
| 十进制 | 二进制 | bitset指定格式输出 | | 除留余数法 | itoa |
| 十进制 | 八进制 | oct/%o指定格式输出 | 流 | 除留余数法 | itoa |
| 十进制 | 十六进制 | hex/%x指定格式输出 | 流 | 除留余数法 | itoa |
| 十进制 | 其他进制 | | | 除留余数法 | itoa |
| 二进制 | 八进制 | 三位一组 | | | |
| 二进制 | 十进制 | 按权展开 | | | strtol |
| 二进制 | 十六进制 | 四位一组 | | | |
| 八进制 | 二进制 | 一位换三 | | 除留余数法 | |
| 八进制 | 十进制 | 按权展开 | 流 | | strtol |
| 八进制 | 十六进制 | | 流 | | |
| 十六进制 | 二进制 | 一位换四 | | 除留余数法 | |
| 十六进制 | 八进制 | | 流 | | |
| 十六进制 | 十进制 | 按权展开 | 流 | | strtol |
基本操作函数:
Atoi(string &S, int R) 任意进制转十进制(All Radix to Int) 参数:任意进制字符串 进制R 作用:利用按权展开加和,返回十进制
Itoa(int Num,int R) 十进制转任意进制(Int to All Radix)参数:十进制数Num,进制R 作用:利用除留余数法,返回逆序的余数,即返回所要转换的进制数
功能实现函数:
ToAll() 十进制转任意进制 调用函数Itoa,自带的itoa
ToDecimal(string &S) 任意进制转十进制函数 调用Atoi函数,strtol函数
ZhiDing() 作用:利用std的hex dec 以及 bitset,c语言的%o,%x
Stream() 作用:利用sstream头文件将数按某进制读入流,输出流
1.任意进制转十进制
【分析】按权展开,求和即可。例如,二进制数110,即4+2+0=6;另外,不想自己写的话,有strtol函数(百度百科)。
long int strtol(const char *nptr,char **endptr,int base);参数:字符串,非法字符指针,字符串中的进制
考虑的很详细,字符串中含有非法的字符(,.*等)时还能停止转换,并返回指针。
2.十进制转任意进制
【分析】除留余数法,逆序输出余数即可。另外,如果自己不想写的话,有itoa函数。
string itoa(int x,char *string,int jz);参数:想要转换的数,转换结果字符串,转换结果的进制
3.指定格式与流
【分析】主要是八进制、十进制和十六进制。对c来说是%o%d,%x;对c++来说是oct,dec,hex。作者感觉所谓的指定格式是输入输出流,sstream的stringstream类是字符串流,本质上应该是差不多的,就写在了一起。学的不深,没有看标准库中类的源代码,请大神指点。
4.二、八、十六之间的转换
【分析】表格里面的一位换四,三位一组之类的是指通过二进制。例如