1. 程式人生 > >JAVA中的進制轉換問題

JAVA中的進制轉換問題

suffix ++ 字符值 cte ring AC number ringbuf int

十進制轉成十六進制:

Integer.toHexString(int i)

十進制轉成八進制

Integer.toOctalString(int i)

十進制轉成二進制

Integer.toBinaryString(int i)

十六進制轉成十進制

Integer.valueOf("FFFF",16).toString()

八進制轉成十進制

Integer.valueOf("876",8).toString()

二進制轉十進制

Integer.valueOf("0101",2).toString()

有什麽方法可以直接將2,8,16進制直接轉換為10進制的嗎?

java.lang.Integer類

parseInt(String s, int radix)

使用第二個參數指定的基數,將字符串參數解析為有符號的整數。

examples from jdk:
parseInt("0", 10) returns 0
parseInt("473", 10) returns 473
parseInt("-0", 10) returns 0
parseInt("-FF", 16) returns -255
parseInt("1100110", 2) returns 102
parseInt("2147483647", 10) returns 2147483647
parseInt("-2147483648", 10) returns -2147483648
parseInt("2147483648", 10) throws a NumberFormatException
parseInt("Kona", 10) throws a NumberFormatException
parseInt("Kona", 27) returns 411787

進制轉換如何寫(二,八,十六)不用算法

Integer.toBinaryString
Integer.toOctalString
Integer.toHexString

任意進制的轉換

import java.util.HashMap;  
import java.util.Map;  
import java.util.Stack;  
public class HexTransformatUtil {    
    /** 
     * 將十進制轉換為任意進制值 
     * @param digths 轉換後的進制最小位上,依次出現的字符值,比如26進制"ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
     * @param num 將被轉換的十進制值 
     * @param length 轉換到指定字符串後,如果不足length長度位,自動補足最小值,比如26進制"ABCDEFGHIJKLMNOPQRSTUVWXYZ"將在最前補"a" 
     * @return 
     */  
    public static String hex10ToAnly(String digths, int num,int length){    
        StringBuffer str = new StringBuffer("");    
        int base = digths.trim().length();  
        if(0==num){  
            str.append(digths.charAt(0));  
        }else{  
            Stack<Character> s = new Stack<Character>();    
            while(num != 0){    
                s.push(digths.charAt(num%base));    
                num/=base;    
            }    
            while(!s.isEmpty()){    
                str.append(s.pop());    
            }  
        }  
        String prefix = "";  
        String suffix = str.toString();  
        if(length>suffix.length()){  
            for(int count = 0;count<length-suffix.length();count++){  
                prefix = prefix + digths.charAt(0);  
            }  
        }  
        return prefix + suffix;    
    }    
      
    /** 
     * 將任意進制轉換為十進制值 
     * @param digths 轉換前的進制最小位上,依次出現的字符值,比如26進制"ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
     * @param hexValue 轉換前的進制字符串值 
     * @return 
     */  
    public static int hexAnlyTo10(String digths, String hexValue){    
        if(null==hexValue||"".equals(hexValue.trim()))  return 0;  
        int base = digths.trim().length();  
          
        Map<String,Integer> digthMap = new HashMap<String,Integer>();  
        int count=0;  
        for(char item : digths.trim().toCharArray()){  
            digthMap.put(""+item, count);  
            count++;  
        }  
        String str = new StringBuffer(hexValue.trim()).reverse().toString();  
        int sum = 0;  
        for(int index = 0;index<str.length();index++){  
            sum = new Double(Math.pow(base, index)).intValue() * digthMap.get(""+str.charAt(index)) +sum;  
        }  
        return sum;  
    }    
      
    public static void main(String[] args) {  
        //將十進制"0123456789"值55轉換為26進制“ABCDEFGHIJKLMNOPQRSTUVWXYZ”對應的值,不需要格式化最後輸出字符串  
        System.out.println(hex10ToAnly("ABCDEFGHIJKLMNOPQRSTUVWXYZ", 55, 0));  
          
        //將26進制“ABCDEFGHIJKLMNOPQRSTUVWXYZ”字符串值“CD”轉換為十進制"0123456789"值55對應的值,不需要格式化最後輸出字符串  
        System.out.println(hexAnlyTo10("ABCDEFGHIJKLMNOPQRSTUVWXYZ", "CD" ));  
    }  
}    

  

JAVA中的進制轉換問題