您的位置:首页 > 其它

两种方法实现10进制和62进制互转

2015-04-21 16:33 465 查看




[java]
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

两种方法均转化成功
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: