java实现进制之间相互转换
二进制,四进制,八进制,10进制,N进,如何实现他们相互之间的转换功能?本人是一名初学者,对应提供的快速接口产生了兴趣,并自己思考进行了实现,如果方法拙笨欢迎指出,供小弟进行下一步的学习。
思路分析
- 01
如何实现进制之间的转换,你可以选择任何一种进制为基准,然后在进行转换,本例主要是以10进制为中间位,根深蒂固的一些问题。一些具有特殊关系的进制之间转换可以,2进制和他的2N进制;例如8进制的12 ,我们可以把他搞成2进制来看待, 0001 0010 ,然后把10010这个就是8进制12转换为2进制的结果。
实现过程
- 01
把任意一个进制转换为10进制,这个是相当容易的。例如我有X进制的ABCD 。我把他转换为10进制就等于 A*X³+B*X²+C*X+D;
- 02
然后再把10进制转换成你要转换成的进制数,参考下图计算规则:
java实现过程
- 01
首先我写的是一个10进制以下的数据直接的转换,这是比较容易理解的,因为10进制以下我们可以直接使用0-9搞定!具体参考下面的代码
- 02
如何实现超出10进制的转换,通过思考到以前学习16进制的转换,思考可以使用A,但是本人想如果无限使用if来肯定不现实,所以本人参考了ASCll码 表:
- 03
直接把带转换的字符串换成char数组,根据对应的char在Ascii中的值进行处理,实现代码参考下列(本人写的一个简单demo): package Test; public class Tbst { public static void main(String[] args) { System.out.println("—————————————执行change()前的buffer—————————————————————————————"); System.out.println("buffer内存:"+Bean.buffer); String string = Bean.change("12ASD", 32, 4); System.out.println("—————————————执行change()后的buffer—————————————————————————————"); System.out.println("buffer内存:"+Bean.buffer); Bean.destroyBuffer(string); System.out.println("—————————————执行destroyBuffer()后的buffer—————————————————————————————"); System.out.println("buffer内存:"+Bean.buffer); } } class Bean { static StringBuffer buffer = new StringBuffer(); /** * * @param value 需要转换的数 * @param f 转换的数的进制数 * @param t 转换为几进制 * @return 创建的buffer.reverse().toString() */ static String change(String value, int f, int t) { int sum = 0; char[] cs = value.toCharArray(); for (int i = 0; i < cs.length; i++) { int c = (int) cs[i]; int b = cs.length-i-1; if (64 < c && c < 91) { sum += (c - 65 + 10)*Math.pow(f,b); } else if ( c > 91) { sum += (c - 97 + 37)*Math.pow(f,b); }else if ( c == '+') { sum += 63*Math.pow(f,b); }else if ( c == '/') { sum += 64*Math.pow(f,b); } else { sum += (c - 48)*Math.pow(f,b); } } while (sum >= t) { buffer.append(sum%t); sum /=t; } buffer.append(sum); return buffer.reverse().toString(); } /** * 释放内存 * @param string 清空buffer */ static void destroyBuffer(String string){ buffer.delete(0, string.length()); } }