两种方法实现10进制和62进制互转
2015-04-21 16:33
465 查看
[java]
view plaincopyprint?
运行结果:
62System=2NaWL
10System=35174605
两种方法均转化成功
view plaincopyprint?
</pre><p></p><div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><strong>[java]</strong> <a target=_blank title="view plain" class="ViewSource" href="http://blog.csdn.net/zoeice/article/details/9713699#">view plain</a><a target=_blank title="copy" class="CopyToClipboard" href="http://blog.csdn.net/zoeice/article/details/9713699#">copy</a><a target=_blank title="print" class="PrintSource" href="http://blog.csdn.net/zoeice/article/details/9713699#">print</a><a target=_blank title="?" class="About" href="http://blog.csdn.net/zoeice/article/details/9713699#">?</a></div></div><ol class="dp-j"><li class="alt"><span><span class="keyword">import</span><span> java.util.Stack; </span></span></li><li><span> </span></li><li class="alt"><span> </span></li><li><span><span class="keyword">public</span><span> </span><span class="keyword">class</span><span> Test { </span></span></li><li class="alt"><span><span class="keyword">private</span><span> </span><span class="keyword">static</span><span> </span><span class="keyword">char</span><span>[] charSet = </span><span class="string">"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"</span><span>.toCharArray(); </span></span></li><li><span> </span></li><li class="alt"><span> <span class="comment">/**</span> </span></li><li><span><span class="comment"> * 将10进制转化为62进制 </span> </span></li><li class="alt"><span><span class="comment"> * @param number </span> </span></li><li><span><span class="comment"> * @param length 转化成的62进制长度,不足length长度的话高位补0,否则不改变什么</span> </span></li><li class="alt"><span><span class="comment"> * @return</span> </span></li><li><span><span class="comment"> */</span><span> </span></span></li><li class="alt"><span> <span class="keyword">public</span><span> </span><span class="keyword">static</span><span> String _10_to_62(</span><span class="keyword">long</span><span> number, </span><span class="keyword">int</span><span> length){ </span></span></li><li><span> Long rest=number; </span></li><li class="alt"><span> Stack<Character> stack=<span class="keyword">new</span><span> Stack<Character>(); </span></span></li><li><span> StringBuilder result=<span class="keyword">new</span><span> StringBuilder(</span><span class="number">0</span><span>); </span></span></li><li class="alt"><span> <span class="keyword">while</span><span>(rest!=</span><span class="number">0</span><span>){ </span></span></li><li><span> stack.add(charSet[<span class="keyword">new</span><span> Long((rest-(rest/</span><span class="number">62</span><span>)*</span><span class="number">62</span><span>)).intValue()]); </span></span></li><li class="alt"><span> rest=rest/<span class="number">62</span><span>; </span></span></li><li><span> } </span></li><li class="alt"><span> <span class="keyword">for</span><span>(;!stack.isEmpty();){ </span></span></li><li><span> result.append(stack.pop()); </span></li><li class="alt"><span> } </span></li><li><span> <span class="keyword">int</span><span> result_length = result.length(); </span></span></li><li class="alt"><span> StringBuilder temp0 = <span class="keyword">new</span><span> StringBuilder(); </span></span></li><li><span> <span class="keyword">for</span><span>(</span><span class="keyword">int</span><span> i = </span><span class="number">0</span><span>; i < length - result_length; i++){ </span></span></li><li class="alt"><span> temp0.append(<span class="string">'0'</span><span>); </span></span></li><li><span> } </span></li><li class="alt"><span> </span></li><li><span> <span class="keyword">return</span><span> temp0.toString() + result.toString(); </span></span></li><li class="alt"><span> </span></li><li><span> } </span></li><li class="alt"><span> </span></li><li><span> </span></li><li class="alt"><span> <span class="comment">/**</span> </span></li><li><span><span class="comment"> * 将62进制转换成10进制数</span> </span></li><li class="alt"><span><span class="comment"> * </span> </span></li><li><span><span class="comment"> * @param ident62</span> </span></li><li class="alt"><span><span class="comment"> * @return</span> </span></li><li><span><span class="comment"> */</span><span> </span></span></li><li class="alt"><span> <span class="keyword">private</span><span> </span><span class="keyword">static</span><span> String convertBase62ToDecimal( String ident62 ) { </span></span></li><li><span> <span class="keyword">int</span><span> decimal = </span><span class="number">0</span><span>; </span></span></li><li class="alt"><span> <span class="keyword">int</span><span> base = </span><span class="number">62</span><span>; </span></span></li><li><span> <span class="keyword">int</span><span> keisu = </span><span class="number">0</span><span>; </span></span></li><li class="alt"><span> <span class="keyword">int</span><span> cnt = </span><span class="number">0</span><span>; </span></span></li><li><span> </span></li><li class="alt"><span> <span class="keyword">byte</span><span> ident[] = ident62.getBytes(); </span></span></li><li><span> <span class="keyword">for</span><span> ( </span><span class="keyword">int</span><span> i = ident.length - </span><span class="number">1</span><span>; i >= </span><span class="number">0</span><span>; i-- ) { </span></span></li><li class="alt"><span> <span class="keyword">int</span><span> num = </span><span class="number">0</span><span>; </span></span></li><li><span> <span class="keyword">if</span><span> ( ident[i] > </span><span class="number">48</span><span> && ident[i] <= </span><span class="number">57</span><span> ) { </span></span></li><li class="alt"><span> num = ident[i] - <span class="number">48</span><span>; </span></span></li><li><span> } </span></li><li class="alt"><span> <span class="keyword">else</span><span> </span><span class="keyword">if</span><span> ( ident[i] >= </span><span class="number">65</span><span> && ident[i] <= </span><span class="number">90</span><span> ) { </span></span></li><li><span> num = ident[i] - <span class="number">65</span><span> + </span><span class="number">10</span><span>; </span></span></li><li class="alt"><span> } </span></li><li><span> <span class="keyword">else</span><span> </span><span class="keyword">if</span><span> ( ident[i] >= </span><span class="number">97</span><span> && ident[i] <= </span><span class="number">122</span><span> ) { </span></span></li><li class="alt"><span> num = ident[i] - <span class="number">97</span><span> + </span><span class="number">10</span><span> + </span><span class="number">26</span><span>; </span></span></li><li><span> } </span></li><li class="alt"><span> keisu = (<span class="keyword">int</span><span>) java.lang.Math.pow( (</span><span class="keyword">double</span><span>) base, (</span><span class="keyword">double</span><span>) cnt ); </span></span></li><li><span> decimal += num * keisu; </span></li><li class="alt"><span> cnt++; </span></li><li><span> } </span></li><li class="alt"><span> <span class="keyword">return</span><span> String.format( </span><span class="string">"%08d"</span><span>, decimal ); </span></span></li><li><span> } </span></li><li class="alt"><span> </span></li><li><span> <span class="comment">/**</span> </span></li><li class="alt"><span><span class="comment"> * @param args</span> </span></li><li><span><span class="comment"> */</span><span> </span></span></li><li class="alt"><span> <span class="keyword">public</span><span> </span><span class="keyword">static</span><span> </span><span class="keyword">void</span><span> main(String[] args) { </span></span></li><li><span> <span class="comment">// TODO Auto-generated method stub</span><span> </span></span></li><li class="alt"><span> System.out.println(<span class="string">"62System="</span><span> +_10_to_62(Integer.parseInt(</span><span class="string">"35174605"</span><span>), </span><span class="number">5</span><span>)); </span></span></li><li><span> System.out.println(<span class="string">"10System="</span><span> +convertBase62ToDecimal(</span><span class="string">"2NaWL"</span><span>)); </span></span></li><li class="alt"><span> } </span></li><li><span> </span></li><li class="alt"><span> </span></li><li><span>} </span></li></ol></div><pre class="java" style="display: none;" name="code">import java.util.Stack; public class Test { private static char[] charSet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".toCharArray(); /** * 将10进制转化为62进制 * @param number * @param length 转化成的62进制长度,不足length长度的话高位补0,否则不改变什么 * @return */ public static String _10_to_62(long number, int length){ Long rest=number; Stack<Character> stack=new Stack<Character>(); StringBuilder result=new StringBuilder(0); while(rest!=0){ stack.add(charSet[new Long((rest-(rest/62)*62)).intValue()]); rest=rest/62; } for(;!stack.isEmpty();){ result.append(stack.pop()); } int result_length = result.length(); StringBuilder temp0 = new StringBuilder(); for(int i = 0; i < length - result_length; i++){ temp0.append('0'); } return temp0.toString() + result.toString(); } /** * 将62进制转换成10进制数 * * @param ident62 * @return */ private static String convertBase62ToDecimal( String ident62 ) { int decimal = 0; int base = 62; int keisu = 0; int cnt = 0; byte ident[] = ident62.getBytes(); for ( int i = ident.length - 1; i >= 0; i-- ) { int num = 0; if ( ident[i] > 48 && ident[i] <= 57 ) { num = ident[i] - 48; } else if ( ident[i] >= 65 && ident[i] <= 90 ) { num = ident[i] - 65 + 10; } else if ( ident[i] >= 97 && ident[i] <= 122 ) { num = ident[i] - 97 + 10 + 26; } keisu = (int) java.lang.Math.pow( (double) base, (double) cnt ); decimal += num * keisu; cnt++; } return String.format( "%08d", decimal ); } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("62System=" +_10_to_62(Integer.parseInt("35174605"), 5)); System.out.println("10System=" +convertBase62ToDecimal("2NaWL")); } }
运行结果:
62System=2NaWL
10System=35174605
两种方法均转化成功
相关文章推荐
- 两种方法实现10进制和62进制互转
- 两种方法实现10进制和62进制互转
- 两种方法实现10进制和62进制互转
- 两种方法把10进制转化为16进制查表法第二种
- JS实现颜色的10进制转化成rgba格式的方法
- php实现将任意进制数转换成10进制的方法
- 进制转换的一种思路两种实现方法
- 菜单功能的两种实现方法
- Sql字符串分组Split函数的两种实现方法(转)
- spring两种方法实现操作对象化
- java多线程学习一:实现多线程的两种方法
- 如何C#中实现在TreeView查找某一节点(两种方法)
- 设置IIS实现禁止js文件缓存及其它两种方法
- 实现一个线程的两种方法【转载】
- JAVA的线程对象实现的两种方法
- 控制DIV显隐 实现选项卡功能的两种方法
- 控制DIV显隐 实现选项卡功能的两种方法
- Android 按钮效果的两种实现方法
- 实现svn副本同步的两种方法
- 数组遍历的两种方法和hash的实现