JAVA中的進制轉換問題
十進制轉成十六進制:
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中的進制轉換問題